调用Validator时抛出NoProviderFoundException问题求助
调用Validator时抛出NoProviderFoundException问题求助
大家好,我现在碰到一个Bean Validation相关的问题,卡了好一阵,想请教下各位大佬!
我的项目是用Spring Boot 2.7.7 + Gradle构建的,目前定义的依赖如下:
// Spring Boot implementation group: "org.springframework.boot", name: "spring-boot-starter-actuator" implementation group: "org.springframework.boot", name: "spring-boot-starter-validation" implementation group: 'org.springframework.boot', name: 'spring-boot-autoconfigure' implementation group: "org.springframework.boot", name: "spring-boot-starter-web" implementation group: "org.springframework.boot", name: "spring-boot-starter-mail" // Swagger/OpenAPI CodeGen implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.14' implementation group: 'org.springdoc', name: 'springdoc-openapi-common', version: '1.6.14' implementation group: "org.openapitools", name: "jackson-databind-nullable", version: "0.2.4" compileOnly group: "org.projectlombok", name: "lombok" annotationProcessor group: "org.springframework.boot", name: "spring-boot-configuration-processor" // Utils implementation 'commons-io:commons-io:2.8.0'
在我的Service里,我是这样实现校验逻辑的:
@Override public List<MyObjectValue> getApplicationDetailFromSearch(@Valid MySearchModel mySearchModel) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Set<ConstraintViolation<MySearchModel>> violations = validator.validate(mySearchModel); if (!violations.isEmpty()) { throw new ConstraintViolationException(violations); } // 后续业务逻辑... }
另外说明下,MySearchModel是一个record类,我给它加了自定义注解@MySearch,并且已经实现了对应的MySearchValidator校验器。
但是当代码执行到Validation.buildDefaultValidatorFactory()这一行时,直接抛出了下面的异常:
javax.validation.NoProviderFoundException: Unable to create a Configuration, because no Jakarta 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) ~[jakarta.validation-api-2.0.2.jar:na] at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:103) ~[jakarta.validation-api-2.0.2.jar:na] // 后续栈信息省略...
我明明已经引入了spring-boot-starter-validation,按道理应该会自动引入Hibernate Validator才对,为什么还会报找不到Provider的错误呢?有没有同学遇到过类似的问题,或者能给我一些排查方向?
备注:内容来源于stack exchange,提问作者Andrej Flieger
相关产品推荐
相关产品推荐

