Spring Boot配置类@NotBlank校验报错:无对应String类型校验器
解决Spring Boot配置类中@NotBlank校验器找不到的问题
哦,这个问题我之前踩过坑!你遇到的HV000030错误,本质不是你代码写错了(毕竟官方文档确实说这么用是对的),而是校验器的依赖没配置到位,导致Spring找不到@NotBlank对应的校验实现。
核心原因
从Spring Boot 2.3版本开始,spring-boot-starter-web不再默认包含校验模块的依赖了。如果你的项目是2.3+版本,必须手动引入校验starter,否则Hibernate Validator(Spring默认的校验器实现)不会被加载,自然找不到@NotBlank的处理逻辑。
解决方案
1. 引入校验starter依赖
根据你的构建工具,添加对应的依赖:
- Maven:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
- Gradle:
implementation 'org.springframework.boot:spring-boot-starter-validation'
如果你的Spring Boot版本低于2.3,那这个依赖已经包含在spring-boot-starter-web里了,这时候要检查是不是手动排除了校验相关的依赖,或者存在版本冲突。
2. 避免手动指定Hibernate Validator版本
如果你之前手动引入了hibernate-validator依赖,建议删掉,改用spring-boot-starter-validation来管理版本——Spring Boot的starter会自动适配兼容的版本,避免出现版本不匹配导致的校验器无法初始化问题。
3. 验证配置是否生效
重启项目后,故意不配置test.uri(或者设为空字符串),如果项目启动时抛出BindException,说明校验已经正常工作了,这就没问题了。
补充说明
你的配置类代码本身是完全正确的:
@Validated开启Spring的校验支持@ConfigurationProperties绑定配置@NotBlank约束String类型的uri不为空或空白字符串
所以只要把依赖补全,问题就能解决啦!
内容的提问来源于stack exchange,提问作者Myroslav




