一、引入依赖

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.2.2.Final</version>
        </dependency>

二、javaBean上设置校验规则

@Data
@AllArgsConstructor
public class Student {
    @NotNull(message = "id不能为空")
    private Integer id;
    @NotNull(message = "姓名不能为空")
    private String name;
    @NotNull(message = "年龄不能为空")
    private Integer age;
}

三、Controller层返回校验错误信息

将不符合校验规则的字段错误信息,统一返回到前台

@RestController
public class StudentController {

    @RequestMapping("/student")
    public String student(@Validated Student student, BindingResult bindingResult) {

        if (bindingResult.hasErrors()) {
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            StringBuffer stringBuffer = new StringBuffer();

            for (ObjectError error : allErrors) {
                System.out.println(error.getDefaultMessage());
                stringBuffer.append(error.getDefaultMessage() + ";");
            }
            return stringBuffer.toString();
        }
        return student.toString();
    }
}

四、利用切面实现全局异常处理

使用全局异常处理之后,在JavaBean上增加异常判断注解之后,只需要在Controller方法里增加@Valid即可

  • BindExceptionGlobalExceptionHandler
@ControllerAdvice
public class BindExceptionGlobalExceptionHandler {

    @ResponseBody
    @ExceptionHandler(BindException.class)
    public ResultBean validationErrorHandler(BindException e) throws JsonProcessingException {
        //1.此处先获取BindingResult
        BindingResult bindingResult = e.getBindingResult();
        //2.获取错误信息
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        System.out.println(allErrors);
        //3.组装异常信息
        StringBuffer stringBuffer = new StringBuffer();
        for (ObjectError error : allErrors) {
            stringBuffer.append(error.getDefaultMessage() + ";");
        }
        //5.返回错误信息
        return new ResultBean(stringBuffer.toString(), 400);
    }
}
  • ResultBean
@Data
public class ResultBean {

    private String msg;
    private Integer code;

    public ResultBean(String msg, Integer code) {
        this.msg = msg;
        this.code = code;
    }

    public static ResultBean success(String msg, Integer code) {
        ResultBean jsonData = new ResultBean(msg, code);
        jsonData.msg = msg;
        return jsonData;
    }

}

image.png

五、常用校验规则

  1. JSR提供的标准注解 @Null 被注释的元素必须为 null
    @NotNull 被注释的元素必须不为 null
    @AssertTrue 被注释的元素必须为 true
    @AssertFalse 被注释的元素必须为 false
    @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @Size(max=, min=) 被注释的元素的大小必须在指定的范围内
    @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
    @Past 被注释的元素必须是一个过去的日期
    @Future 被注释的元素必须是一个将来的日期
    @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

  2. Hibernate Validator提供的校验注解 @NotBlank(message =) 验证字符串非null,且长度必须大于0
    @Email 被注释的元素必须是电子邮箱地址
    @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
    @NotEmpty 被注释的字符串的必须非空
    @Range(min=,max=,message=) 被注释的元素必须在合适的范围内