Skip to content

@Valid注解使用

基本使用

参考: https://www.jianshu.com/p/c8686fa5ef63

相关注解:

@Null 限制只能为null

@NotNull 限制必须不为null

@AssertFalse 限制必须为false

@AssertTrue 限制必须为true

@DecimalMax(value) 限制必须为一个不大于指定值的数字

@DecimalMin(value) 限制必须为一个不小于指定值的数字

@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

@Future 限制必须是一个将来的日期

@Max(value) 限制必须为一个不大于指定值的数字

@Min(value) 限制必须为一个不小于指定值的数字

@Past 限制必须是一个过去的日期

@Pattern(value) 限制必须符合指定的正则表达式

@Size(max,min) 限制字符长度必须在min到max之间

@Past 验证注解的元素值(日期类型)比当前时间早

@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)

@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格

@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

使用演示:

1.类上添加注解

java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RegisterUser {

    @Min(value = 1000000)
    @NotNull(message = "ID不能为空")
    private Long userId;

    @NotNull(message = "用户名不能为空")
    @Email(message = "邮箱不正确")
    private String username;

    /**
     * 教师职称
     */
    private String position;

    /**
     * 教师所属教研室
     */
    private String office;
}

2.针对controller参数加注解校验

java
@PostMapping("/action/register")
    public Result registerByForm(@Valid @RequestBody RegisterUser registerUser){
        return userService.register(registerUser);
    }

3.设定全局异常处理类

java
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

    private final static String EXCEPTION_MSG_KEY = "Exception message : ";

    @ResponseBody
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handleValidException(MethodArgumentNotValidException e){
                //日志记录错误信息
                log.error(Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
                //将错误信息返回给前台
                return Result.error(103, Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
    }
}

4.测试结果 1745302392067

注意事项

@Size注解要和@NotNull一起使用限制集合不能为空

java
@Data
public class Man {
    private String name;
    @NotNull(message = "集合不能为空")
    @Size(min = 1, message = "集合不能为空")
    private List<Man> manList;
}