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…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
Yii2项目自动向GitLab上报Bug
Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...
