路径变量的Spring引导验证返回空白消息

路径变量的Spring引导验证返回空白消息,spring,spring-boot,validation,message,Spring,Spring Boot,Validation,Message,我使用spring引导验证来验证@PathVariable,如下面的代码所示,验证有效,但是当我通过curl.exe执行时没有返回消息,我希望收到默认消息 @GetMapping("/number/{id}") String getNumber(@PathVariable @Min(2) Long id) { System.out.println("getNumber :" + id); return "param

我使用spring引导验证来验证@PathVariable,如下面的代码所示,验证有效,但是当我通过curl.exe执行时没有返回消息,我希望收到默认消息

  @GetMapping("/number/{id}")
  String getNumber(@PathVariable @Min(2) Long id) {
        System.out.println("getNumber :" + id);
    return "param id is : " + id;
  }
我指定了一个CustomGlobalExceptionHandler来捕获ConstraintViolationException,其工作原理是返回的http状态代码为400,并且它在控制台日志中显示一条消息“必须大于或等于2”


您能告诉我为什么没有收到返回到命令行的消息吗?

您是否向控制器添加了以下注释:

import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Min;

@RestController
@Validated
您必须实现该类才能获得400条消息,而不是500条:

@ControllerAdvice
public class CustomGlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(ConstraintViolationException.class)
    public void constraintViolationException(HttpServletResponse response) throws IOException {
        response.sendError(HttpStatus.BAD_REQUEST.value());
    }

    //..
}

是否向控制器添加了以下注释:

import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Min;

@RestController
@Validated
您必须实现该类才能获得400条消息,而不是500条:

@ControllerAdvice
public class CustomGlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(ConstraintViolationException.class)
    public void constraintViolationException(HttpServletResponse response) throws IOException {
        response.sendError(HttpStatus.BAD_REQUEST.value());
    }

    //..
}

当然,您没有收到消息,您发送的消息也不仅仅是一个状态,那么客户端应该如何接收消息呢?此外,您正在比较显示的错误的不同方面(并且您正在覆盖默认的异常处理机制,以便不再适用)。您建议我如何发送消息。我返回到@ACV建议的代码,但仍然没有消息。我已经尝试了一条自定义消息
@Min(value=2,message=“2是最小值”)
,但它也没有显示。当然,您没有收到消息,您没有发送消息,只是发送了一个状态,那么客户端应该如何接收消息?此外,您正在比较显示的错误的不同方面(并且您正在覆盖默认的异常处理机制,以便不再适用)。您建议我如何发送消息。我返回到@ACV建议的代码,但仍然没有消息。我已经尝试了一条自定义消息
@Min(value=2,message=“2是最小值”)
,但也没有显示该消息。是的,@RestController和@Validated都添加到控制器中。我按照您的建议更改了CustomGlobalExceptionHandler,命令行输出略有不同。
{“timestamp”:“2020-08-11T11:09:26.812+00:00”,“status”:400,“error”:“Bad Request”,“message”:“path”:“/demo-0.0.2-SNAPSHOT/number/1”}*关闭连接0
。但是消息仍然为空。是的,@RestController和@Validated都被添加到控制器。我按照您的建议更改了CustomGlobalExceptionHandler,命令行输出略有不同。
{“timestamp”:“2020-08-11T11:09:26.812+00:00”,“status”:400,“error”:“Bad Request”,“message”:“path”:“/demo-0.0.2-SNAPSHOT/number/1”}*关闭连接0
。但信息仍然是空白的。
@ControllerAdvice
public class CustomGlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(ConstraintViolationException.class)
    public void constraintViolationException(HttpServletResponse response) throws IOException {
        response.sendError(HttpStatus.BAD_REQUEST.value());
    }

    //..
}