在Java应用开发中,尤其是涉及到Web服务和数据处理时,确保传入的数据符合预期是非常重要的。javax.validation.constraints
包提供了一系列强大的注解,用于简化这一过程。这些注解基于JSR 303/JSR 349规范,能够帮助开发者以声明式的方式执行参数验证,而无需手动编写复杂的校验逻辑。下面我们将逐一介绍这些注解,并提供示例说明其适用场景和字段类型。
1. 布尔值验证
@AssertFalse
- 用途:确保被注解的字段必须为
false
。 - 适用字段类型:
boolean
,Boolean
- 示例:
@AssertFalse private boolean inactive;
@AssertTrue
- 用途:确保被注解的字段必须为
true
。 - 适用字段类型:
boolean
,Boolean
- 示例:
@AssertTrue private boolean isActive;
2. 数值范围验证
@DecimalMax(value)
- 用途:限制数值最大值(包括小数)。
- 适用字段类型:
BigDecimal
,BigInteger
,double
,float
- 示例:
@DecimalMax("99.99") private BigDecimal price;
@DecimalMin(value)
- 用途:限制数值最小值(包括小数)。
- 适用字段类型:同上
- 示例:
@DecimalMin("1.00") private double discount;
@Digits(integer, fraction)
- 用途:控制数字的整数部分和小数部分位数。
- 适用字段类型:同上
- 示例:
@Digits(integer=5, fraction=2) private float measurement;
@Max(value)
- 用途:限制数值最大值(整数)。
- 适用字段类型:
byte
,short
,int
,long
,BigDecimal
,BigInteger
- 示例:
@Max(100) private int quantity;
@Min(value)
- 用途:限制数值最小值(整数)。
- 适用字段类型:同上
- 示例:
@Min(0) private long serialNumber;
@Negative
- 用途:确保数值为负。
- 适用字段类型:同上(不包括
BigDecimal
,BigInteger
的小数情况) - 示例:
@Negative private int temperatureDelta;
@NegativeOrZero
- 用途:确保数值为负或零。
- 适用字段类型:同上
- 示例:
@N@NegativeOrZero private short adjustment;
@Positive
- 用途:确保数值为正。
- 适用字段类型:同上
- 示例:
@Positive private long populationCount;
@PositiveOrZero
- 用途:确保数值为正或零。
- 适用字段类型:同上
- 示例:
@PositiveOrZero private int score;
3. 字符串和集合验证
- 用途:验证字符串是否符合电子邮件地址的格式。
- 适用字段类型:
String
- 示例:
@Email private String userEmail;
@Future
- 用途:确保日期在未来。
- 适用字段类型:
Date
,LocalDate
,LocalDateTime
,ZonedDateTime
- 示例:
@Future private LocalDate expirationDate;
@FutureOrPresent
- 用途:确保日期在未来或现在。
- 适用字段类型:同上
- 示例:
@FutureOrPresent private LocalDateTime lastUpdate;
@NotBlank
- 用途:确保字符串非空且不只包含空白字符。
- 适用字段类型:
CharSequence
(如String
) - 示例:
@NotBlank private String password;
@NotEmpty
- 用途:确保集合、数组或字符串非空。
- 适用字段类型:
Array
,Collection
,Map
,CharSequence
- 示例:
@NotEmpty private List<String> tags;
@NotNull
- 用途:确保字段不为
null
。 - 适用字段类型:所有类型
- 示例:
@NotNull private User createdBy;
@Null
- 用途:确保字段为
null
。 - 适用字段类型:所有类型
- 示例:
@Null private transient String temporaryData;
@Past
- 用途:确保日期在过去。
- 适用字段类型:同日期相关类型
- 示例:
@Past private Date birthDate;
@PastOrPresent
- 用途:确保日期在过去或现在。
- 适用字段类型:同上
- 示例:
@PastOrPresent private LocalDateTime createdAt;
@Pattern(regexp)
- 用途:使用正则表达式匹配字符串。
- 适用字段类型:
CharSequence
- 示例:
@Pattern(regexp = "^\\d{3}-\\d{2}-\\d{4}$") private String ssn;
@Size(min, max)
- 用途:限制字符串、集合、数组的长度。
- 适用字段类型:
Array
,Collection
,Map
,CharSequence
- 示例:
@Size(min = 6, max = 20) private String username;
以上注解大大简化了Java Bean参数的验证工作,提高了代码的可读性和维护性。在Spring Boot等框架中,它们通常与方法参数验证、数据绑定机制结合使用,为API开发提供了强大的支持。