必须同时添加@ConfigurationProperties和@Validated注解并确保类被Spring管理,嵌套对象字段还需加@Valid才能触发递归校验,且需引入spring-boot-starter-validation依赖。

Spring Boot 中使用 @Validated 校验 @ConfigurationProperties 配置类,核心是开启校验支持并正确添加约束注解。默认情况下,@ConfigurationProperties 不自动触发 Bean Validation,必须显式启用。
启用 @ConfigurationProperties 的校验支持
在配置类上同时添加 @ConfigurationProperties 和 @Validated 注解,并确保该类被 Spring 容器管理(如通过 @Configuration 或 @Component)。
- 不能只加
@Validated而不加@ConfigurationProperties,否则不会绑定配置项 - 不能仅用
@Valid(它是 JSR-303 的嵌套校验注解,不适用于顶层配置类) - 推荐将配置类单独定义为
@Configuration类,并用@EnableConfigurationProperties显式注册(更清晰、可测试)
在配置类字段上添加校验注解
使用标准的 Jakarta Bean Validation 注解(如 @NotBlank、@Min、@Pattern、@Email 等)标注字段。注意:Java 8+ 项目使用 jakarta.validation 包,不是旧的 javax.validation。
-
@NotBlank适用于String,检查非 null 且 trim 后长度 > 0 -
@NotNull适用于基本类型包装类或对象,但不校验空字符串 - 对嵌套对象字段,需在对应字段上加
@Valid才会递归校验 - 示例:
public class MyAppProperties {<br> @NotBlank(message = "api.url 不能为空")<br> private String url;<br> @Min(value = 1, message = "timeout 至少为 1 秒")<br> private int timeout;<br> @Valid<br> private Database database;<br> // getter/setter...<br> }
确保依赖和配置正确
检查项目是否引入了校验支持:
- Maven 中需有
spring-boot-starter-validation(Spring Boot 2.3+ 已默认包含,低版本需显式添加) - 配置文件中对应属性必须存在且格式合法,否则启动时抛出
BindException或ValidationException - 若使用
@ConfigurationPropertiesScan,确保扫描路径覆盖配置类;若手动注册,用@EnableConfigurationProperties(MyAppProperties.class)
处理校验失败
校验失败会在 Spring Boot 应用启动阶段直接报错(Application run failed),异常类型通常是 org.springframework.boot.context.properties.ConfigurationPropertiesBindException 或其包装异常。
- 错误信息里会明确指出哪个属性、哪条规则失败,例如:
url must not be blank - 可通过日志级别调高
org.springframework.boot.context.properties查看详细绑定过程 - 不建议在运行时“吞掉”校验失败——配置错误应尽早暴露


















