排除其他使用不当的原因外,需要注意的是springboot2.3.0不再自带校验包,需要自行引入。几个月前处理过,突然一时间又给忘了,这里记录一下。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2021年5月补充
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.1.Final</version>
</dependency>
版本过高也会引起@Valid失效,具体堆栈错误是
Caused by: javax.validation.NoProviderFoundException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:291)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:103)
原因见 http://hibernate.org/validator/releases/7.0/
试过引入jakarta-validation-api ,然后根据需要继续引入jakarta-el-api,最后从import javax.validation.*
改为import jakarta.validation.*
报错是都消失了,主动调Validator的validate()方法是可以了,但是@Valid注解方式还是不生效,兼容性有点差,还是老老实实回退hibernate-validator到6版本吧