2-4.校验
约 573 字大约 2 分钟
2025-06-24
在进行属性绑定时,虽然 Spring Boot 提供了松散绑定规则,允许在书写配置时更灵活。但是,由于无法感知模型类中的数据类型,容易出现类型不匹配的问题。例如,代码中需要 int
类型,但配置中提供了非法的字符串值,这会导致数据绑定失败甚至引发错误。
Spring Boot 提供了强大的数据校验功能,可以有效避免上述问题。它基于 J2EE 的 JSR303 规范,并可选择不同的校验框架实现。本例中使用 Hibernate 提供的校验框架进行数据校验。
步骤 1:开启校验框架
首先,需要在项目中引入相关的依赖。
<!-- 1. 导入 JSR303 规范 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<!-- 使用 hibernate 框架提供的校验器做实现 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
javax.validation:validation-api
定义了 Bean Validation 的标准 API,而 org.hibernate.validator:hibernate-validator
提供了 JSR303 规范的具体实现。
步骤 2:启用校验功能
在需要开启校验功能的类上使用 @Validated
注解。
@Component
@Data
@ConfigurationProperties(prefix = "servers")
// 开启对当前 bean 的属性注入校验
@Validated
public class ServerConfig {
}
步骤 3:设置校验规则
对具体的字段设置校验规则,例如使用 @Max
和 @Min
注解限制数值范围。
@Component
@Data
@ConfigurationProperties(prefix = "servers")
// 开启对当前 bean 的属性注入校验
@Validated
public class ServerConfig {
// 设置具体的规则
@Max(value = 8888, message = "最大值不能超过 8888")
@Min(value = 202, message = "最小值不能低于 202")
private int port;
}
@Max(value = 8888, message = "最大值不能超过 8888")
指定了 port
属性的最大值为 8888,如果超过这个值,将会抛出一个带有 " 最大值不能超过 8888" 信息的异常。@Min(value = 202, message = "最小值不能低于 202")
指定了 port
属性的最小值为 202,如果小于这个值,将会抛出一个带有 " 最小值不能低于 202" 信息的异常。这些校验规则确保了 port
属性的取值在有效范围内。
通过以上步骤,Spring Boot 应用就能够有效地进行数据校验,从而提高程序的健壮性和可靠性。