java实体类常用参数验证:
javax.validation.constraints 包的作用
该包提供了一系列注解,用于在 Java 应用中实现?数据验证逻辑?,帮助开发者快速、声明式地定义数据约束规则。主要作用包括:
简化数据校验
通过注解直接标记字段或方法的约束条件(如非空、范围、格式等),避免手动编写重复的校验代码。
统一校验标准
为不同层级(如实体类、DTO、API请求参数)提供一致的校验机制,适用于前端表单、后端服务、数据库交互等场景。
与框架集成
广泛支持主流框架(如 Spring、Hibernate、Quarkus),可无缝集成到 REST API、JPA 实体、表单提交等流程中。
一、验证类型
1、@AssertFalse
@AssertFalse
private boolean isInactive; // 表示该字段必须为false,例如表示一个不活跃的状态。
2、@AssertTrue
@AssertTrue
private boolean isActive; // 表示该字段必须为true,例如表示一个活跃的状态。
3、@DecimalMax
该注解用于确保被注解的元素(通常为BigDecimal
或String
类型,表示数字)的值小于或等于指定的最大值。
@DecimalMax("100.00")
private BigDecimal maximumValue; // 表示该字段的值必须小于或等于100.00。
4、@DecimalMin
该注解用于确保被注解的元素(通常为BigDecimal
或String
类型,表示数字)的值大于或等于指定的最小值。
@DecimalMin("0.01")
private BigDecimal minimumValue; // 表示该字段的值必须大于或等于0.01。
5、@Digits
该注解用于确保被注解的元素(通常为BigDecimal
、BigInteger
、String
或byte
、short
、int
、long
的包装类)的值的位数在指定的整数位数和小数位数范围内。
@Digits(integer = 5, fraction = 2)
private BigDecimal preciseValue; // 表示该字段的整数部分最多5位,小数部分最多2位。
6、@Email
该注解用于确保被注解的元素(通常为String
类型)的值是一个有效的电子邮件地址。
@Email
private String emailAddress; // 表示该字段必须是一个有效的电子邮件地址。
7、@Future
该注解用于确保被注解的元素(通常为Date
、Calendar
或java.time
包下的日期时间类型)的值在当前日期的未来。
@Future
private LocalDate futureDate; // 表示该字段的值必须是未来的一个日期。
8、@FutureOrPresent
该注解用于确保被注解的元素(日期时间类型)的值在当前日期或未来。
@FutureOrPresent
private LocalDateTime futureOrPresentDateTime; // 表示该字段的值必须是当前时间或未来的时间。
9、@Max
该注解用于确保被注解的元素(通常为BigInteger
、Long
、Int
、Short
、Byte
或它们的包装类以及String
类型,表示数字)的值小于或等于指定的最大值。
@Max(100)
private int maxValue; // 表示该字段的值必须小于或等于100。
10、@Min
该注解用于确保被注解的元素(数字类型)的值大于或等于指定的最小值。
@Min(1)
private int minValue; // 表示该字段的值必须大于或等于1。
11、@Negative
该注解用于确保被注解的元素(数字类型)的值为负数。
@Negative
private int negativeValue; // 表示该字段的值必须为负数。
12、@NegativeOrZero
该注解用于验证数字是否为负数或零。如果注解的字段值是正数,则会触发验证失败。
@NegativeOrZero
private int temperature;
13、@NotBlank
该注解用于验证字符串是否非空且至少包含一个字符。它通常用于验证如名称、地址等字符串字段。
@NotBlank
private String address;
14、@NotEmpty
该注解用于验证集合、数组或字符串是否非空。它适用于各种集合类型以及字符串。
@NotEmpty
private List tags;
15、@NotNull
该注解用于验证对象是否不为 null。它适用于所有对象类型,确保字段被赋值。
@NotNull
private User user;
16、@Null
该注解用于验证对象是否为 null。它确保字段没有被赋值,适用于那些应该保持为空的字段。
@Null
private String temporaryField;//temporaryField 字段必须为 null。
17、@Past
该注解用于验证日期是否在现在之前。它适用于日期和时间类型的字段,确保日期是过去的某个时间点。
@Past
private Date startDate;
18、@PastOrPresent
该注解用于验证日期是否在现在之前或等于现在。它适用于需要确保日期不超过当前日期的场景。
@PastOrPresent
private Date eventDate;
19、@Pattern
该注解用于验证字符串是否匹配指定的正则表达式。它通常用于验证如电子邮件地址、电话号码等需要特定格式的字符串。
假设我们需要验证一个邮政编码,它必须是一个由5个数字组成的字符串。可以使用@Pattern
注解如下:
@Pattern(regexp = "\\d{5}")
private String zipCode;
20、@Positive
该注解用于验证数字是否大于零。它通常用于确保数量、金额等字段的值是正数。
假设我们需要验证一个商品的数量,它必须是一个大于零的整数。可以使用@Positive
注解如下:
@Positive
private int quantity;
21、@PositiveOrZero
该注解用于验证数字是否大于或等于零。它通常用于确保年龄、计数器等字段的值是非负数。
假设我们需要验证一个人的年龄,它必须是一个大于或等于零的整数。可以使用@PositiveOrZero
注解如下:
@PositiveOrZero
private int age;
22、@Size
该注解用于验证集合、数组或字符串的大小是否在指定的范围内。它通常用于确保列表、数组等集合的长度符合特定要求。
假设我们需要验证一个标签列表,它的大小必须在1到10之间(包括1和10)。可以使用@Size
注解如下:
@Size(min = 1, max = 10)
private List tags;
@Size(min=2, max=100)
private String password;
二、验证方式
1、在 Spring Boot 中校验请求体:重要注解 @Valid
@PostMapping("/getUsers")
public ResponseEntity> createUser(@Valid @RequestBody UserVO userVO) {
// 校验通过后执行业务逻辑
}
2、POM引用
1)旧版本
javax.validation
validation-api
2.0.1.Final
org.hibernate.validator
hibernate-validator
6.2.5.Final
2)新版本
jakarta.validation
jakarta.validation-api
3.0.2
推荐使用新版本。