一、引入依賴
<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;
}
}
五、常用校驗規則
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=) 被注釋的元素必須在合適的范圍內