添加依赖(springboot2.3以下版本已经集成validation,不用单独引入依赖)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
实体类参数校验
** 实体类**
@NotNull(message = "id不能为空")
private Integer id;
@Email(message = "邮箱格式不正确", regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$")
@NotBlank(message = "name不能为空")
private String email;
@Min(value = 1, message = "年龄必须大于1岁")
@Max(value = 150, message = "年龄必须小于150岁")
private Integer age;
Controller方法接受实体类时,须单独在实体类前加上@Validated注解才能生效
@RequestMapping("/getTest")
public HashMap<String, Object> getTest(@Validated Demo demo) {
return new HashMap<String, Object>(2) {{
put("test", demo);
}};
}
Bean Validation 的注解:
Hibernate Validator的注解:
@NotNull、@NotEmpty、@NotBlank的区别:
@NotNull:任何对象的value不能为null
@NotEmpty:集合对象的元素不为0,即集合不为空,也可以用于字符串不为null
@NotBlank:只能用于字符串不为null,并且字符串trim()以后length要大于0
单个参数或者多个参数校验
单独接受参数时只需要在Controller上加@Validated注解
@CrossOrigin
@RestController
@RequestMapping("/test")
@Validated
public class TestController {
@RequestMapping("/setTest")
public HashMap<String, Object> setTest(
@NotNull(message = "test不能为空!") String test,
@NotNull(message = "id不能为空") String id
) {
return new HashMap<String, Object>(2) {{
put("test", test);
put("id", id);
}};
}
}
全局异常处理
/**
* 异常处理器
*
* @author Range
*/
@RestControllerAdvice
public class ExceptionHandlerConfiguration {
/**
* 单个或者多个参数校验异常捕获
*
* @param e
* @param request
* @return
*/
@ExceptionHandler(ConstraintViolationException.class)
public HashMap<String, Object> constraintViolationException(ConstraintViolationException e, HttpServletRequest request) {
HashMap<String, Object> result = new HashMap<>();
try {
Set<ConstraintViolation<?>> constraintViolations = e.getConstraintViolations();
for (ConstraintViolation<?> constraintViolation : constraintViolations) {
String params = constraintViolation.getPropertyPath().toString();
String param = params.split("\\.")[1];
result.put(param, constraintViolation.getMessage());
}
return result;
} catch (Exception exception) {
return result;
}
}
/**
* 实体类校验异常捕获
*
* @param e
* @return
*/
@ExceptionHandler(BindException.class)
public HashMap<String, Object> parameterMissingExceptionHandler(BindException e) {
HashMap<String, Object> result = new HashMap<>();
try {
for (FieldError fieldError : e.getFieldErrors()) {
result.put(fieldError.getField(), fieldError.getDefaultMessage());
}
return result;
} catch (Exception exception) {
return result;
}
}
}