Spring框架提供了接口参数校验的注解。下面是相关注解:

看下@Validated注解源码

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Validated {

上面说明作用域:类、方法、参数上。

@Validated作用在方法参数上,就会对这个参数进行注解规则注解的校验:

验证的User内部的注解校验规则

    public void testArgsAnno(@Validated User user){
      
    }
@Data
public class User {
    @NotNull(message = "名字不为空")
    private String name;

    @Max(value = 10,message = "用户区域不得大于10")
    @Min(value = 1,message = "用户区域不得小于0")
    private Integer areaId;
}

此时如果请求接口,响应信息如下:这不是我们期望的结果!

{
    "timestamp": "2022-12-26T10:24:04.056+00:00",
    "status": 400,
    "error": "Bad Request",
    "path": "/abc/efg/testArgsAnno"
}

调整异常响应信息

我们一般在全局异常捕获BindException,这个异常!

    @ExceptionHandler({BindException.class})
    @ResponseBody
    public ResponseEntity BindException(HttpServletRequest req, BindException e) {
        logger.error("方法参数验证失败:{}", e.getMessage());
        BindingResult bindingResult = e.getBindingResult();
        return ResponseEntity.badRequest().body(bindingResult.getFieldError().getDefaultMessage());
    }

测试

其他注解

@JsonFormat Jackson包下的时间格式工具

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
    private Date date;