在写RestFul服务的的时候的时候遇到需要指定字段长度大小以及是否为空的时候;网上找到这个@Validated 注解可以解决这个问题。
记录一个Demo 以备自己日后查看。
添加pom。xml文件依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.7.Final</version>
</dependency>
1、定义一个类
public class User {
@NotEmpty(message = "用户名不能空")
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Max(value = 50, message = "年龄最大不能超过150")
private Integer age;
}
2、写一个Controller 请求 (在请求中加上
@Validated
)
@PostMapping("/test")
public User getUser( @Validated @RequestBody User user)
{
return user;
}
3、定义异常捕获
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public String methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException ex) {
List<ObjectError> allErrors = ex.getBindingResult().getAllErrors();
// 将所有错误信息拼接成一个字符串
StringBuilder msg = new StringBuilder();
for (ObjectError error : allErrors) {
msg.append(error.getDefaultMessage() + ";");
}
return msg.toString();
}
}
4、用postman请求
其他用法:
@AssertFalse 校验false
@AssertTrue 校验true
@DecimalMax(value=,inclusive=) 小于等于value,
inclusive=true,是小于等于
@DecimalMin(value=,inclusive=) 与上类似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull 检查Null
@Past 检查日期
@Pattern(regex=,flag=) 正则
@Size(min=, max=) 字符串,集合,map限制大小
@Validate 对po实体类进行校验