javax.validation中数据验证的注解使用与示例

javax.validationJava 提供的一个用于数据验证的库,其中定义了多种用于约束和验证数据的注解。下面对常用的验证注解类进行详细介绍,并提供对应的使用示例,每个注解都配有中文注释以帮助理解。

1. @AssertFalse

表示该属性的值必须为 false

public class User {
    @AssertFalse(message = "isAdmin 必须为 false")
    private boolean isAdmin;
}

2. @AssertTrue

表示该属性的值必须为 true

public class User {
    @AssertTrue(message = "isActive 必须为 true")
    private boolean isActive;
}

3. @DecimalMax

表示该属性的值必须小于或等于指定的最大值(对于浮点型数值)。

public class Product {
    @DecimalMax(value = "999.99", message = "价格不能超过999.99")
    private BigDecimal price;
}

4. @DecimalMin

表示该属性的值必须大于或等于指定的最小值(对于浮点型数值)。

public class Product {
    @DecimalMin(value = "0.1", message = "价格不能小于0.1")
    private BigDecimal price;
}

5. @Digits

限制该属性的整数位数和小数位数。

public class Product {
    @Digits(integer = 5, fraction = 2, message = "数值格式不正确,整数最多5位,小数最多2位")
    private BigDecimal price;
}

6. @Email

表示该属性必须是有效的电子邮件格式。

public class User {
    @Email(message = "邮箱格式不正确")
    private String email;
}

7. @Future

表示该属性的日期必须是将来的日期。

public class Event {
    @Future(message = "日期必须是未来的日期")
    private LocalDate eventDate;
}

8. @FutureOrPresent

表示该属性的日期必须是将来或当前日期。

public class Event {
    @FutureOrPresent(message = "日期必须是未来或当前日期")
    private LocalDate eventDate;
}

9. @Max

表示该属性的值不能大于指定的最大值(对于整数型数值)。

public class Product {
    @Max(value = 1000, message = "库存不能超过1000")
    private int stock;
}

10. @Min

表示该属性的值不能小于指定的最小值(对于整数型数值)。

public class Product {
    @Min(value = 1, message = "库存不能小于1")
    private int stock;
}

11. @Negative

表示该属性的值必须为负数。

public class Account {
    @Negative(message = "余额必须为负数")
    private BigDecimal balance;
}

12. @NegativeOrZero

表示该属性的值必须为负数或零。

public class Account {
    @NegativeOrZero(message = "余额必须为负数或零")
    private BigDecimal balance;
}

13. @NotBlank

表示该属性不能为 null,并且必须包含至少一个非空字符。

public class User {
    @NotBlank(message = "用户名不能为空")
    private String username;
}

14. @NotEmpty

表示该属性不能为 null,并且不能是空集合或空字符串。

public class User {
    @NotEmpty(message = "兴趣列表不能为空")
    private List<String> interests;
}

15. @NotNull

表示该属性不能为 null

public class User {
    @NotNull(message = "年龄不能为空")
    private Integer age;
}

16. @Null

表示该属性的值必须为 null

public class User {
    @Null(message = "ID 必须为空")
    private Long id;
}

17. @Past

表示该属性的日期必须是过去的日期。

public class User {
    @Past(message = "出生日期必须是过去的日期")
    private LocalDate birthDate;
}

18. @PastOrPresent

表示该属性的日期必须是过去或当前日期。

public class User {
    @PastOrPresent(message = "注册日期必须是过去或当前日期")
    private LocalDate registrationDate;
}

19. @Pattern

表示该属性的值必须符合指定的正则表达式。

public class User {
    @Pattern(regexp = "^[a-zA-Z0-9]+$", message = "用户名只能包含字母和数字")
    private String username;
}

20. @Positive

表示该属性的值必须为正数。

public class Product {
    @Positive(message = "价格必须为正数")
    private BigDecimal price;
}

21. @PositiveOrZero

表示该属性的值必须为正数或零。

public class Product {
    @PositiveOrZero(message = "库存必须为正数或零")
    private int stock;
}

22. @Size

限制集合、数组、字符串的大小或长度。

public class User {
    @Size(min = 2, max = 20, message = "用户名长度必须在2到20之间")
    private String username;

    @Size(min = 1, message = "兴趣列表至少要有一个兴趣")
    private List<String> interests;
}

验证注解使用示例

import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

public class User {
    
    @NotNull(message = "ID 不能为空")
    private Long id;

    @NotBlank(message = "用户名不能为空")
    @Size(min = 2, max = 20, message = "用户名长度必须在2到20之间")
    private String username;

    @Email(message = "邮箱格式不正确")
    private String email;

    @Past(message = "出生日期必须是过去的日期")
    private LocalDate birthDate;

    @DecimalMin(value = "0.1", message = "价格不能小于0.1")
    @DecimalMax(value = "999.99", message = "价格不能超过999.99")
    private BigDecimal price;

    @Size(min = 1, message = "兴趣列表至少要有一个兴趣")
    private List<String> interests;
    
    @Positive(message = "库存必须为正数")
    private int stock;

    // Getters and Setters
}

这些注解可以帮助我们在应用程序中简化数据校验逻辑,确保传入的数据符合业务规则。通过 message 属性,我们可以自定义错误消息,从而提高程序的用户友好性。在实际开发中,常常与框架如 Hibernate Validator 结合使用,以便自动化处理数据验证。

标签: Java

相关文章

Java中线程池遇到父子任务示例及避坑

在Java中使用线程池可以有效地管理和调度线程,提高系统的并发处理能力。然而,当涉及到父子任务时,可能会遇到一些常见的Bug,特别是在子线程中查询数据并行处理时。本文将通过示例代码展示这些常见问...

java中异步任务的实现详解

在Java中实现异步任务是一种提高应用程序性能和响应性的常用技术。异步编程允许某些任务在等待其他任务完成时继续执行,从而避免了阻塞。本文将介绍几种在Java中实现异步任务的方法,并讨论它们的解决...

解密 ClassFinal 加密的 Java Jar包

ClassFinal 是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。要点...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件