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

news/2025/3/18 16:45:29/

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 Setterspublic 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;}
}

http://www.ppmy.cn/news/1580109.html

相关文章

工程化与框架系列(32)--前端测试实践指南

前端测试实践指南 🧪 引言 前端测试是保证应用质量的重要环节。本文将深入探讨前端测试的各个方面,包括单元测试、集成测试、端到端测试等,并提供实用的测试工具和最佳实践。 测试概述 前端测试主要包括以下类型: 单元测试&a…

P11229 [CSP-J 2024] 小木棍

题目传送门 前言 我们班很多人这道题都爆了,原因是写分讨写挂了。不像睿智的我,直接暴力加上一点点思维。 解题思路 step 1 首先我们把每个数的贡献都列出来。 设 g ( x ) g(x) g(x) 为拼成 x x x 需要的木棍数量。 第一行表示数 x i x_i xi​…

正则表达式小结

正则表达式是一种用于描述文本模式的特殊字符串,它由一系列字符和特殊字符组成,用于匹配和操作文本数据。下面是正则表达式的一些常见规则: 字符匹配: 普通字符:正则表达式中的普通字符(字母、数字、符号&a…

Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装

Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装 目录 Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在…

【微知】plantuml在泳道图中如何将多个泳道框起来分组并且设置颜色?(box “浏览器“ #LightGreen endbox)

泳道分组并且着色 分组用 box和endbox ,颜色用#xxx,标注用"xxx" box "浏览器" #LightGreen participant "浏览器1" as Browser participant "浏览器2" as Browser2 endboxparticipant "服务端" as …

XEngine Kit

文章目录 XEngine Kit(GPU加速引擎服务)提供基于马良GPU的性能提升方案,包括GPU/AI超分能力、自适应VRS(Variable Rate Shading,可变速率着色)、Subpass Shading等,通过图形算法以及软硬件优化&…

[蓝桥杯 2023 省 B] 飞机降落

[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti​ 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 D i D_{i} Di​ 个单位时间,即它最早可以于 T i T_{i} Ti​ 时刻…

vue3怎么和大模型交互?

引言 平时我们都是用的在线的AI工具,直接输入问题,然后AI回答我们,那么怎么把AI接入项目中呢? 这个问题问得好。 方案一:引入第三方已封装好的UI库方案二:自己写 对于方案一,市面上已有一些…