快速进行数据验证的优雅实现-注解

javax.validation包下的注解主要用于数据验证,确保数据符合特定的约束条件。以下是一个详细的表格,列出了这些注解的名称、作用、使用场景和示例:

Excel 表格示例

注解名称 作用 使用场景 示例
@AssertFalse 确保字段值为 false 布尔字段的验证 @AssertFalse private boolean active;
@AssertTrue 确保字段值为 true 布尔字段的验证 @AssertTrue private boolean active;
@DecimalMax 确保字段值小于或等于指定的最大值 数值字段的验证 @DecimalMax("100.00") private BigDecimal price;
@DecimalMin 确保字段值大于或等于指定的最小值 数值字段的验证 @DecimalMin("10.00") private BigDecimal price;
@Digits 确保字段值的数字部分和小数部分的位数符合指定要求 数值字段的验证 @Digits(integer=5, fraction=2) private BigDecimal amount;
@Future 确保字段值是一个未来的日期 日期字段的验证 @Future private Date startDate;
@FutureOrPresent 确保字段值是一个未来的日期或当前日期 日期字段的验证 @FutureOrPresent private LocalDate startDate;
@Max 确保字段值小于或等于指定的最大值 数值字段的验证 @Max(100) private int age;
@Min 确保字段值大于或等于指定的最小值 数值字段的验证 @Min(18) private int age;
@NotNull 确保字段值不为 null 通用字段的验证 @NotNull private String name;
@Null 确保字段值为 null 通用字段的验证 @Null private String name;
@Past 确保字段值是一个过去的日期 日期字段的验证 @Past private Date birthDate;
@PastOrPresent 确保字段值是一个过去的日期或当前日期 日期字段的验证 @PastOrPresent private LocalDate birthDate;
@Pattern 确保字段值符合指定的正则表达式 字符串字段的验证 @Pattern(regexp="^[a-zA-Z0-9_]+$") private String username;
@Size 确保字段值的长度在指定范围内 字符串、集合、数组等的验证 @Size(min=5, max=10) private String password;
@Range 确保字段值在指定范围内 数值字段的验证 @Range(min=18, max=60) private int age;
@Valid 用于嵌套验证,确保对象的属性也符合验证规则 对象字段的验证 @Valid private User user;
@Validate 用于嵌套验证,确保对象的属性也符合验证规则 对象字段的验证 @Validate private User user;
@Validated 用于类或方法级别的验证 类或方法的验证 @Validated public class MyService {}
@Constraint 定义自定义验证注解 创建自定义注解时 @Constraint(validatedBy = MyValidator.class) @interface MyCustomAnnotation {}
@GroupSequence 定义验证组的顺序 创建自定义验证组时 @GroupSequence({Default.class, MyGroup.class}) public class MyEntity {}
@GroupSequenceProvider 提供动态验证组的顺序 创建自定义验证组时 @GroupSequenceProvider(MyGroupSequenceProvider.class) public class MyEntity {}

DEMO示例:

java 复制代码
import javax.validation.constraints.*;

public class User {

    @NotNull(message = "Name cannot be null")
    @Size(min = 2, max = 50, message = "Name must be between 2 and 50 characters")
    private String name;

    @Min(value = 18, message = "Age must be at least 18")
    @Max(value = 100, message = "Age must be at most 100")
    private int age;

    @NotNull(message = "Email cannot be null")
    @Email(message = "Email must be valid")
    private String email;

    @NotNull(message = "Password cannot be null")
    @Size(min = 8, max = 50, message = "Password must be between 8 and 50 characters")
    private String password;

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
相关推荐
折哥的程序人生 · 物流技术专研5 分钟前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
researcher-Jiang36 分钟前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
夜雪一千37 分钟前
Python enumerate() 函数完整详解:遍历同时获取索引,告别手动计数
服务器·windows·python
donoot1 小时前
Linux系统下图书馆级电子书全自动标准化分类整理完整实施方案
大数据·linux·运维·电子书管理
Felix-lxd2 小时前
Ubuntu 22.04 配置 Nginx
linux·nginx·ubuntu
西门吹-禅2 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_2 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
weixin_BYSJ19873 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
AI小码3 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
大E帝国子民13 小时前
MacOS 安装Seismic Unix
服务器·macos·unix