spring boot @Validated注解不生效
问题描述接口上添加了@Validated注解,但是bindingResult.hasErrors()的结果却是false解决方案检查spring boot的版本引入spring-boot-starter-web依赖后就可以使用@Validated是因为它本身就包含了hibernate-validator的依赖。但从spring boot 2.3开始,官方就移除了其中包含的hibernate-val
·
问题描述
- 接口上添加了
@Validated
注解,但是bindingResult.hasErrors()
的结果却是false
解决方案
一:检查spring boot的版本
- 引入
spring-boot-starter-web
依赖后就可以使用@Validated
是因为它本身就包含了hibernate-validator
的依赖。但从spring boot 2.3开始,官方就移除了其中包含的hibernate-validator
依赖。 - 当
spring-boot-starter-web
中没有引入hibernate-validator
依赖时,需要自己添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
二:检查对实体属性的注解是否正确
- 注解内容详解参考附录一
三:实体存在嵌套关系
- 需在嵌套的实体上添加注解
@Valid
,例:
//A
public class A implements Serializable{
private Long id;
@Valid //嵌套时需添加该注解
private B b;
}
//B
public class B implements Serializable{
private Long id;
@NotNull
private String name;
}
附录一
注解 | 说明 |
---|---|
@Null | 限制只能为null |
@NotNull | 限制必须不为null |
@AssertFalse | 限制必须为false |
@AssertTrue | 限制必须为true |
@DecimalMax(value) | 限制必须为一个不大于指定值的数字 |
@DecimalMin(value) | 限制必须为一个不小于指定值的数字 |
@Digits(integer,fraction) | 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction |
@Future | 限制必须是一个将来的日期 |
@Max(value) | 限制必须为一个不大于指定值的数字 |
@Min(value) | 限制必须为一个不小于指定值的数字 |
@Past | 限制必须是一个过去的日期 |
@Pattern(value) | 限制必须符合指定的正则表达式 |
@Size(max,min) | 限制字符长度必须在min到max之间 |
@Past | 验证注解的元素值(日期类型)比当前时间早 |
@NotEmpty | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
@NotBlank | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),只应用于字符串且在比较时会去除字符串的空格 |
@Email | 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 |
更多推荐
已为社区贡献1条内容
所有评论(0)