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

相关文章

如何使用Go编写跨平台组件并让Java或PHP调用

在现代软件开发中,跨语言调用是一个常见的需求。假设我们有一个用Go语言编写的组件,我们希望Java或PHP能够直接调用这个组件中对外提供的方法。为了实现这一目标,我们可以使用以下几种方法:1. ...

linux下或macOS中配置maven及加速

下载 Maven 压缩包:访问 Maven 官方下载页面,下载你需要的版本。解压压缩包:将下载的压缩包解压到你选择的目录,例如 /opt/maven:sudo mkdir -p /opt/mav...

编译最新的kkFileView并使用docker打包

kkFileView 是一个开源的文件预览服务,支持多种文件格式的在线预览。本文将详细介绍如何编译 kkFileView 的最新版本,并将其打包成 Docker 镜像。1. 环境准备在开始之前,...

Spring Boot 内置的常用工具类整理

Spring Boot 在核心库中提供了一系列常用的工具类,涵盖了断言、对象处理、集合操作、文件与资源处理、IO 流、反射和 AOP。这些工具类帮助开发者提高代码的简洁性和可维护性。本文将对这些...

JAVA+VUE的多国语言跨境电商外贸商城源码

多语言跨境电商外贸商城TikTok内嵌商城,商家入驻、一键铺货、一键提货 全开源完美运营海外版抖音TikTok商城系统源码,TikToK内嵌商城,跨境商城系统源码接在tiktok里面的商城。ti...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件