Java Bean参数验证:深入探索javax.validation.constraints注解

发布于:2024-05-12 ⋅ 阅读:(154) ⋅ 点赞:(0)

在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

  • 用途:确保数值为负或零。
  • 适用字段类型:同上
  • 示例
    @NegativeOrZero
    private short adjustment;
    

@Positive

  • 用途:确保数值为正。
  • 适用字段类型:同上
  • 示例
    @Positive
    private long populationCount;
    

@PositiveOrZero

  • 用途:确保数值为正或零。
  • 适用字段类型:同上
  • 示例
    @PositiveOrZero
    private int score;
    

3. 字符串和集合验证

@Email

  • 用途:验证字符串是否符合电子邮件地址的格式。
  • 适用字段类型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开发提供了强大的支持。


网站公告

今日签到

点亮在社区的每一天
去签到