Spring Validation 是 Spring Framework 的一部分,它提供了一种简单的方式来验证 Java 对象的数据。Spring Validation 基于 JSR 303/JSR 349(也称为 Bean Validation)规范,允许开发者使用注解来定义对象的约束条件,从而简化了验证逻辑的编写。
1.导入依赖
<!-- Spring Boot Starter Web 依赖web环境 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
spring-boot-starter-validation
和 hibernate-validator
在 Spring Boot 中扮演着不同的角色,但它们紧密相关。下面是两者之间的主要区别:
spring-boot-starter-validation
提供了 Spring Boot 中 Bean Validation 的自动配置和支持。它还提供了对 Spring MVC 控制器中验证的支持,例如通过@Valid
和@Validated
注解来验证请求体和方法参数。hibernate-validator
是一个具体的 Bean Validation 实现,它提供了验证逻辑和标准的验证注解。它提供了所有标准的验证注解(如@NotNull
,@Size
,@Pattern
等)的实现。支持创建自定义验证注解和相应的验证器实现。- 通常情况下,只需要添加
spring-boot-starter-validation
即可,因为它会自动包含 Hibernate Validator 或其他 Bean Validation 实现。
2.标准注解
2.1.常用注解
- @Null : 指定字段必须为
null
。 - @NotNull : 指定字段不得为
null
。 - @NotBlank : 指定字符串必须不为空,且不全是空白字符。
- @NotEmpty : 指定字符串、数组、集合、Map 或其他可迭代类型必须不为空。
- @AssertFalse : 指定布尔值必须为
false
。 - @AssertTrue : 指定布尔值必须为
true
。 - @Min(value) : 指定数值必须大于等于指定的最小值。
- @Max(value) : 指定数值必须小于等于指定的最大值。
- @DecimalMin(value) : 指定数值必须大于等于指定的小数值。
- @DecimalMax(value) : 指定数值必须小于等于指定的小数值。
- @Size(min, max) : 指定字符串、数组、集合、Map 或其他可迭代类型的元素数量必须在指定范围内。
- @Digits(integer, fraction) : 指定数值的整数部分和小数部分的最大位数。
- @Past : 指定日期必须在过去。
- @Future : 指定日期必须在未来。
- @PastOrPresent : 指定日期必须在过去或现在。
- @FutureOrPresent : 指定日期必须在未来或现在。
- @Pattern(regexp) : 指定字符串必须匹配指定的正则表达式。
- @Positive : 指定数值必须大于 0。
- @PositiveOrZero : 指定数值必须大于等于 0。
- @Negative : 指定数值必须小于 0。
- @NegativeOrZero : 指定数值必须小于等于 0。
- @Email : 指定字符串必须是有效的电子邮件地址。
- @URL(protocol, host, port) : 指定字符串必须是有效的 URL。
- @CreditCardNumber : 指定字符串必须是有效的信用卡号码。
- @Length(min, max) : 指定字符串长度必须在指定范围内。
- @Range(min, max) : 指定数值必须在指定范围内。
2.2.使用案例
-
定义验证规则。
-
使用
@Valid
注解来验证控制器方法的参数。 -
处理验证错误。
-
实现额外的逻辑,如检查用户名是否唯一。