Springboot @Validated注解详细说明
在Spring Boot中,@Validated注解用于验证请求参数。它可以应用在Controller类或方法上
1、引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2、参数说明与使用示例
| 注解 | 验证的数据类型 | 描述 |
|---|---|---|
| @NotNull | 任意类型 | 验证属性不能为null |
| @NotBlank | 字符串 | 验证字符串属性不能为空且长度必须大于0 |
| @Size(min,max ) | CharSequence Collection Map Array | 字符串:字符串长度必须在指定的范围内 Collection:集合大小必须在指定的范围内 Map:map的大小必须在指定的范围内 Array:数组长度必须在指定的范围内 |
| @Min | 整型类型 | 验证数字属性的最小值 |
| @Max | 整型类型 | 验证数字属性的最大值 |
| @DecimalMin | 数字类型 | 验证数字属性的最小值(包括小数) |
| @DecimalMax | 数字类型 | 验证数字属性的最大值(包括小数) |
| @Digits(integer,fraction) | 数字类型 | 验证数字属性的整数位数和小数位数 |
| 字符串类型 | 验证字符串属性是否符合Email格式 | |
| @Pattern | 字符串 | 验证字符串属性是否符合指定的正则表达式 |
| @Positive | 数字类型 | 验证数值为正数 |
| @PositiveOrZero | 数字类型 | 验证数值为正数或0 |
| @Negative | 数字类型 | 验证数值为负数 |
| @NegativeOrZero | 数字类型 | 验证数值为负数或0 |
| @AssertTrue | 布尔类型 | 参数值必须为 true |
| @AssertFalse | 布尔类型 | 参数值必须为 false |
| @Past | 时间类型(Date) | 参数值为时间,且必须小于 当前时间 |
| @PastOrPresent | 时间类型(Date) | 参数值为时间,且必须小于或等于 当前时间 |
| @Future | 时间类型(Date) | 参数值为时间,且必须大于 当前时间 |
| @FutureOrPresent | 时间类型(Date) | 参数值为时间,且必须大于或等于 当前日期 |
@Data
public class User {// @NotNull:验证属性不能为null。@NotNull(message = "用户名不能为null")private String username;// @NotBlank:验证字符串属性不能为空且长度必须大于0。@NotBlank(message = "用户名不能为空且长度必须大于0")private String username1;// @Size:验证字符串属性的长度范围。@Size(min = 6, max = 20,message = "密码最小6位,最长20位")private String password;// @Min:验证数字属性的最小值。@Min(value = 18,message = "年龄最小18岁")private int age;// @Max:验证数字属性的最大值。@Max(100)private int age1;// @DecimalMin:验证数字属性的最小值(包括小数)。@DecimalMin("0.01")private BigDecimal price;// @DecimalMax:验证数字属性的最大值(包括小数)。@DecimalMax("1000.00")private BigDecimal price1;// @Digits:验证数字属性的整数位数和小数位数。@Digits(integer = 3, fraction = 2)private BigDecimal weight;// @Email:验证字符串属性是否符合Email格式。@Emailprivate String email;// @Pattern:验证字符串属性是否符合指定的正则表达式。@Pattern(regexp = "[A-Za-z0-9]+")private String username2;// @Positive:验证数值为正数@Positiveprivate int age2;// @PositiveOrZero:验证数值为正数或0@PositiveOrZeroprivate int age3;// @Negative:验证数值为负数@Negativeprivate int age4;// @NegativeOrZero:验证数值为负数或0@NegativeOrZeroprivate int age5;// @AssertTrue:参数值必须为 true@AssertTrueprivate boolean hasMoney;// @AssertFalse:参数值必须为 false@AssertFalseprivate boolean hasMoney1;// @Past:参数值为时间,且必须小于 当前时间@Pastprivate Date time;// @PastOrPresent:参数值为时间,且必须小于或等于 当前时间@PastOrPresentprivate Date time1;// @Future:参数值为时间,且必须大于 当前时间@Futureprivate Date time2;// @FutureOrPresent:参数值为时间,且必须大于或等于 当前日期@FutureOrPresentprivate Date time3;
}
嵌套校验:
在被检验的字段上添加 @Valid 注解就可以实现嵌套检验
@Data
public class User3 {@ValidList<User2> user2List;@Validprivate User2 user2;
}@Dataclass User2 {@NotBlank(message = "用户名不能为空!")private String username;
}
3、校验注解的三个参数:

message:自定义错误消息。可以通过该参数指定验证失败时返回的错误消息。
示例:
public class User {@NotBlank(message = "用户名不能为空")private String username;// getter and setter
}
groups:分组校验。可以通过该参数指定在特定的验证分组中才进行验证。
示例:
public interface Group1 {}public interface Group2 {}public class User {@NotBlank(groups = Group1.class)private String username;@NotBlank(groups = Group2.class)private String password;// getter and setter
}
username属性只在Group1分组中进行验证,password属性只在Group2分组中进行验证。
payload:用于携带额外的验证信息。可以通过该参数传递一些自定义的验证信息。(不常用)
示例:
public class User {@NotBlank(payload = {ValidationInfo.class})private String username;// getter and setter
}public class ValidationInfo {private String info;// getter and setter
}
当验证失败时,可以通过ConstraintViolation对象获取到ValidationInfo对象,并获取其中的验证信息。
Set<ConstraintViolation<User>> violations = validator.validate(user);
for (ConstraintViolation<User> violation : violations) {if (violation.getConstraintDescriptor().getPayload().contains(ValidationInfo.class)) {ValidationInfo validationInfo = violation.getConstraintDescriptor().getPayload(ValidationInfo.class);String info = validationInfo.getInfo();// 处理验证信息}
}
4、在post 和 get 请求上使用
在post上使用@Validated,get上直接放校验注解

相关文章:
Springboot @Validated注解详细说明
在Spring Boot中,Validated注解用于验证请求参数。它可以应用在Controller类或方法上 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </depen…...
STM32初学者,到底选标准库还是HAL库?
当初学者尝试学习STM32开发时,通常会面临一个关键的选择:是选择STM32的标准库,还是HAL库?这两个库各自有着优势与适用场景,本文将从多个角度分析,帮助初学者更好地选择适合自己的库。 在开始之前ÿ…...
小学生作业随机加减乘除运算计算习题答案 html源码
小学生作业随机加减乘除运算计算习题答案 html源码 这道题目提供了多种选项,包括运算符和输入的运算数范围。题目数量也可以选择。如果你选择好了选项,就可以点击出题按钮进行练习。 为了方便,题目答案可以打印出来。但是,如果隐藏了横线,就会去除等号后面的下划线。推荐使用…...
nvm下载安装配置
一、作用 nvm是node版本管理的工具,具有管理、下载、切换node版本等能力。经常不同项目需要依赖不同版本的node,此时nvm就能有效的解决node版本切换的问题。 二、nvm下载安装配置 (1)安装包地址 https://github.com/coreybutl…...
2023-08-07力扣每日一题
链接: 344. 反转字符串 题意: 如题 解: 初级算法做过的题啊-感觉这几天重复题还蛮多的 实际代码: #include<iostream> #include<vector> #include<algorithm> using namespace std; /* void reverseStri…...
uni——不规则tab切换(skew)
案例展示 案例代码 <!-- 切换栏 --> <view class"tabBoxs"><view class"tabBox"><block v-for"(item,index) in tabList" :key"index"><view class"tabItem":class"current item.id&…...
Docker安装Grafana以及Grafana应用
Doker基础 安装 1、 卸载旧的版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 2、需要的安装包 sudo yum install -y yum-utils 3、设置镜像的仓库 yum-config-m…...
OpenSource - 分布式重试平台
文章目录 概述重试方案对比设计思想流量管理平台预览场景应用强通知场景发送MQ场景回调场景异步场景 概述 在当前广泛流行的分布式系统中,确保系统数据的一致性和正确性是一项重大挑战。为了解决分布式事务问题,涌现了许多理论和业务实践,其…...
oracle稳定执行计划
二、稳定执行计划 (一)sql profile的好处 稳定执行计划 在不能修改目标sql的sql文本的情况下使目标sql语句按照指定的执行计划运行。 1、automatic类型的sql profile 本质是针对目标sql的一些额外的调整信息,这些额外的调整信息需要与原目标s…...
docker安装neo4j
参考文章: 1、Mac 本地以 docker 方式配置 neo4j_neo4j mac docker_Abandon_first的博客-CSDN博客 2、https://www.cnblogs.com/caoyusang/p/13610408.html 安装的时候,参考了以上文章。遇到了一些问题,记录下自己的安装过程: …...
第十五章 定义 HL7 的 DTL 数据转换
文章目录 第十五章 定义 HL7 的 DTL 数据转换 第十五章 定义 HL7 的 DTL 数据转换 每个接口可能需要一定数量的数据转换。创建转换时,不要使用保留的包名称。 重要提示:请勿在数据转换中手动更改 HL7 转义序列;自动处理这些。 可以使用“数…...
【笔记】移动光猫改桥接
1. 登录后台 移动光猫的超管和密码(百度的) 账号:CMCCAdmin 密码:aDm8H%MdA 浏览器访问 192.168.1.1 并登录 2. 选择连接 点击“网络”,在“连接名称”下拉框选择 INTENET_R_VID 字样的连接,并截图备…...
网络安全进阶学习第十四课——MSSQL注入
文章目录 一、MSsql数据库二、MSsql结构三、MSsql重点表1、master 数据库中的Sysdatabases 表2、Sysobjects 表3、Syscolumns 表 四、Mssql常用函数五、Mssql的报错注入六、Mssql的盲注常用以下函数进行盲注: 七、联合注入1、获取当前表的列数2、获取当前数据库名3、…...
【C语言】初阶结构体
🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:C语言初阶 ✨其他专栏:代码小游戏 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论…...
24届近5年南京理工大学自动化考研院校分析
今天学长给大家带来的是南京理工大学控制考研分析 满满干货~还不快快点赞收藏 一、南京理工大学 学校简介 南京理工大学是隶属于工业和信息化部的全国重点大学,学校由创建于1953年的新中国军工科技最高学府——中国人民解放军军事工程学院…...
5.PyCharm基础使用及快捷键
在前几篇文章中介绍了PyCharm的安装和汉化,本篇文章一起来看一下PyCharm的基本用法和一些快捷键的使用方法。 本篇文章PyCharm的版本为PyCharm2023.2 新建项目和运行 打开工具,在菜单中——文件——新建项目 选择项目的创建位置(注意最好不要使用中文路径和中文名项目名称…...
RabbitMQ的安装
RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本:otp_win64_23.2 rabbitmq-server-3.8.16 版本说明:https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…...
GPU版PyTorch对应安装教程
一、正确安装符合自己电脑的对应GPU版本的PyTorch之前需要了解三个基本概念 算力、CUDA driver version、CUDA runtime version ①算力:需要先知道你的显卡,之后根据官网表格进行对应,得到算力 ②CUDA driver version:电脑上显卡…...
医学影像PACS临床信息系统源码
医学影像临床信息系统(Picture Archiving and Communication Systems)PACS是指从医疗影像设备中获得数字影像,利用高速网络进行存储、管理、传输的医疗影像信息管理系统。通过该系统,能实现影像数字化、无胶片化管理。 登记系统 …...
Python(Web时代)——jinja2模板
简介 Jinja2是Flask框架默认支持的模板引擎,是python的web项目中被广泛应用的一种模板引擎,jinja2的作者与Flask是同一个人。 jinja2具有以下特点: 非常灵活,提供了控制结构、表达式与继承等 性能好 可读性强 渲染一个模板&a…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
