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

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

在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. 字符串和集合验证

@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开发提供了强大的支持。

目录
相关文章
|
2天前
|
Java Spring
JAVA注解:传统与现代的完美结合,你的代码值得拥有!
【6月更文挑战第29天】Java注解,作为连接传统与现代的编程工具,简化企业级应用开发,提升代码可读性和维护性。通过自定义注解如`@Loggable`,可以将行为(如日志记录)与方法实现分离,减少模板代码。使用AOP(如Spring)处理注解,实现行为拦截,增强代码灵活性和可扩展性。拥抱Java注解,让代码更现代、更高效!
26 16
|
2天前
|
IDE Java 程序员
JAVA注解大揭秘:为何程序员都爱它如命?
【6月更文挑战第29天】Java注解是元数据机制,用于在代码中嵌入信息供编译器、IDE和工具使用。它们以`@`标识,可用于类、方法等,用于编译时检查、代码生成(如Lombok的`@Getter`、`@Setter`)、框架集成(如Spring的`@Autowired`)。程序员喜欢注解因其简洁性、可读性和可扩展性,能减少冗余代码并增强代码的可理解性。
22 15
|
2天前
|
IDE Java 编译器
JAVA注解,你的代码需要的一次“心灵按摩”!
【6月更文挑战第29天】Java注解是提升代码可维护性的关键,它们是编译器和IDE理解代码意图的特殊标记,不同于仅作解释的注释。注解可用于编译时检查(如@Override、@NotNull)、自动生成代码(Lombok的@Getter、@Setter)、框架集成(Spring的@Autowired、MyBatis的@Mapper)。通过注解,代码变得更简洁、功能更强大,为项目带来效率提升。尝试使用注解,赋予代码新生命!
21 12
|
2天前
|
IDE Java 编译器
深入解析JAVA注解:元数据如何改变编程世界
【6月更文挑战第29天】Java注解,作为元数据机制,为代码增添上下文信息,改变编程方式。注解标记在类、方法等上,不直接影响执行,但为编译器等提供额外信息。分为元注解、编译时和运行时注解,用于元数据提供、代码简化、提高可读性及自动化。示例展示了定义`@Loggable`注解来标记日志记录方法。注解广泛应用于依赖注入、ORM、Web服务等,提升效率和灵活性,是现代Java开发的关键。未来其应用将更广泛。
14 3
|
2天前
|
Java 编译器 开发者
JAVA注解,让代码“开口说话”的魔法术!
【6月更文挑战第29天】Java注解,一种元数据机制,让代码“开口”传达意图。它们增强可读性,提供编译器与框架处理代码的额外信息。例如,@Description注解描述方法功能,@Autowired在Spring中自动装配Bean,自定义注解如@MyCustomAnnotation允许定义独特行为。注解提升开发效率,是理解与使用Java的关键。
|
2天前
|
Java 编译器 数据库连接
JAVA注解:代码界的“隐形翅膀”?!
【6月更文挑战第29天】Java注解,编程的“隐形翅膀”,提供编译检查、框架集成及自定义元数据功能。如@Override确保方法重写正确,@Autowired在Spring中自动装配Bean。通过自定义注解,开发者能创造独特代码逻辑。例如,定义@SpecialProcessing注解标记需特殊处理的方法,增强代码可读性和可扩展性。利用注解,让代码飞翔在更广阔的世界。
11 1
|
2天前
|
XML Java 编译器
JAVA注解大揭秘:元数据,你真的了解它吗?
【6月更文挑战第29天】Java注解是元数据机制,用于为代码添加不改变逻辑的额外信息。它们在编译检查(如`@Override`)、配置(如Spring的`@Autowired`)和自定义元数据中发挥作用。自定义注解如`@Loggable`可配合AOP实现日志记录,简化代码并增强可维护性。通过定义切面类和使用`@Before`、`@After`,可以拦截并处理带注解的方法,展示注解在实际应用中的灵活性。
|
3天前
|
Java 编译器
Java健壮性 Java可移植性 JDK, JRE, JVM三者关系 Java的加载与执行原理 javac编译与JAVA_HOME环境变量介绍 Java中的注释与缩进 main方法的args参数
Java健壮性 Java可移植性 JDK, JRE, JVM三者关系 Java的加载与执行原理 javac编译与JAVA_HOME环境变量介绍 Java中的注释与缩进 main方法的args参数
5 1
|
2天前
|
IDE Java 数据库连接
JAVA注解:元数据,代码的“身份证”?!
【6月更文挑战第29天】Java注解,作为代码的“身份证”,提供元数据,用于编译时检查、自动生成代码和框架集成。例如,@Override确保方法重写正确,@Deprecated标记过时,@Autowired在Spring中实现依赖注入。Lombok的@Getter/@Setter简化getter/setter。注解提升代码质量和效率,是现代Java开发的关键实践。
7 0
|
2天前
|
IDE Java 数据库连接
JAVA注解:那些年,我们错过的代码元数据!
【6月更文挑战第29天】Java注解,非执行代码的元数据,常被误解为注释。其实,它们支持编译时检查(如@Override)、自动生成代码、依赖注入(如Spring)和ORM映射(如Hibernate)。通过自定义注解,如示例中的`@MyAnnotation`,可在运行时通过反射增强方法功能。别再错过注解的力量,让它们提升代码的灵活性和可维护性!
9 0