升级Spring Boot 3后Bean Validation无法正常工作的问题排查
问题原因与解决办法
核心问题
Spring Boot 3 完全切换到Jakarta EE规范,Bean Validation相关API的包名从javax.validation改为jakarta.validation,你的配置存在两个关键问题:
- 同时引入旧版
javax.validation:validation-api和新版jakarta.validation-api,导致类路径冲突 - 重复引入
hibernate-validator与spring-boot-starter-validation,后者已包含适配Spring Boot 3的Validator实现及对应API
解决步骤
清理冗余依赖
仅保留spring-boot-starter-validation即可,它会自动引入适配版本的jakarta.validation-api和hibernate-validator:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>3.0.5</version> </dependency>(若项目使用Spring Boot parent依赖管理版本,可省略手动指定
version)修正Validator初始化代码
将导入包从javax.validation替换为jakarta.validation:import jakarta.validation.Validation; import jakarta.validation.Validator; private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();推荐:使用Spring注入方式
Spring Boot环境下,更建议直接注入Validator实例,无需手动初始化:import jakarta.validation.Validator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class YourClass { private final Validator validator; @Autowired public YourClass(Validator validator) { this.validator = validator; } }
验证
执行mvn clean install清理依赖后重启项目,即可解决NoProviderFoundException异常。
内容的提问来源于stack exchange,提问作者user1883212
相关产品推荐
相关产品推荐

