一、引入依赖
<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
五、常用校验规则
-
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=) 被注释的元素必须符合指定的正则表达式 -
Hibernate Validator提供的校验注解
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
网友评论