@Validated和@Valid注解

发布时间:2026/11/1 14:56:01

@Validated和@Valid注解 1.二者区别于配合方式注解常见放置位置核心作用Validated(Spring 提供)类名上方(如UserController)开启整个 Controller 类的校验功能直接对String、Integer等平铺参数生效。Valid(JSR-303 标准)方法参数对象前(如Valid RequestBody DTO)开启嵌套/对象级校验触发 DTO 对象内部属性上的注解校验。代码对比如下RestController RequestMapping(/api/user) Validated // 1. 类级别注解开启整个类的简单参数校验能力 public class UserController { // 简单参数不需要在参数前加 Valid直接生效 GetMapping(/sendCaptcha) public BaseResponseString sendCaptcha( NotBlank Email RequestParam String targetEmail ) { ... } // 对象参数必须加 Valid否则 UserRegisterRequest 内部的 NotBlank 等注解统统会被忽略 PostMapping(/register) public BaseResponseLoginAndRegisterResponse register( Valid RequestBody UserRegisterRequest userRegisterRequest ) { ... } }2.常用校验注解在基于JSR-303 / Jakarta Bean Validation如spring-boot-starter-validation做接口参数校验时除了你前面看到的NotBlank和Email常用校验注解主要分为以下几类--字符串判空类最容易混淆需特别注意注解适用于校验规则 / 允许的情况常用场景NotBlankString最严格不能为null且去掉前后空格后长度必须 0邮箱、手机号、用户名、密码、验证码NotEmptyString, 集合, 数组, Map不能为null且长度/元素个数 0对字符串允许 纯空格批量删除时的 ID 数组/列表NotNull任意类型不能为null但如果是空字符串或空集合[]依然能通过对象、包装类型如Long userId、枚举-- 字符串格式与长度类注解适用于核心功能与示例常用场景PatternString满足指定的正则表达式如regexp ^\\d{6}$手机号格式、身份证号、固定格式编码SizeString, 集合, 数组限制字符串长度或集合大小如Size(min 6, max 20)限制密码/昵称长度、限制批量操作的最大数量EmailString校验是否符合标准电子邮箱格式用户注册邮箱-- 数值与范围限制类注解适用于核心功能与示例常用场景Min/Max数字类型限制最小/最大值包含边界值如Min(1)页码pageNum、每页条数pageSizeRange数字类型来自 Hibernate Validator限制数值在某区间如Range(min 1, max 120)年龄、月份范围Positive/PositiveOrZero数字类型必须为正数/正数或 0金额、商品数量、ID 主键---时间与日期限制类注解适用于核心功能与示例常用场景Past/PastOrPresent日期/时间类型必须是过去的时间/过去或当前时间出生日期、日志查询开始时间Future/FutureOrPresent日期/时间类型必须是未来的时间/将来或当前时间活动结束时间、预约时间、优惠券到期时间---布尔值类注解适用于核心功能与示例常用场景IsTrue/IsFalseBoolean必须为true或false用户注册时勾选“同意隐私协议”IsTrue 生产环境最佳搭配方案在实际写代码如 DTO 请求类时这些注解经常做组合搭配public class UserRegisterRequest { // 1. 非空 邮箱格式 NotBlank(message 邮箱不能为空) Email(message 邮箱格式不正确) private String email; // 2. 非空 长度限制 正则要求必须包含字母和数字 NotBlank(message 密码不能为空) Size(min 8, max 20, message 密码长度必须在 8-20 位之间) Pattern(regexp ^(?.*[A-Za-z])(?.*\\d)[A-Za-z\\d]{8,20}$, message 密码必须包含字母和数字) private String password; // 3. 嵌套校验对象如果 DTO 里面还包着另一个实体/DTO必须加上 Valid 才会触发深层校验 NotNull(message 扩展信息不能为空) Valid private UserExtInfo extInfo; }
延伸阅读

更多相关文章

2026/10/30 16:17:07

AI208X温控仪表实战解析:从PID整定到RS485组网

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 1:35:30

PCB差分对布线实战:开源EDA工具下的信号完整性与保护设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 8:32:24

用Claude自然语言指令实现视频编辑:原理、部署与最佳实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 2:01:37

1.c++入门篇

1.c中的关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castunsigneddefaultcharexportnewstructusingfriendclassext…

2026/11/1 2:01:37

《江灯合声》:有可行的分框版,也仍可以选择连续鸣谢

武汉江岸区栎坡合唱团在免费节目册《江灯合声》中,以表格集中鸣谢资助者。各家共同要求改为独立小框,团里仍想保留表格。现有全名与支持事项清楚可见,双方此前未承诺具体排版。我支持保留表格。补充的试排材料让选择更具体:分框能…

2026/11/1 2:01:37

关于“贾子猜想”的数学地位、结构特征与讨论边界

关于“贾子猜想”的数学地位、结构特征与讨论边界摘要 本文对“贾子猜想”进行基于公开表述与现有数学事实的分析。该猜想主张:当正整数 n3m>5(即 n6,9,12,15,…)时,方程x₁ⁿ x₂ⁿ ⋯ xₙⁿ yⁿ不存在正整数解。文章首先…

2026/11/1 2:01:37

启动报Port 8088 was already in use?先查是谁占的

启动报Port 8088 was already in use?先查是谁占的 项目启动报 Port 8088 was already in use,意思很直白:这个端口已经有人占了。 先说原理:端口是"门牌号",一间房只住一个进程 端口就是一台机器上的门牌号…

2026/11/1 2:01:37

担心文档上云?本地运行的办公AI才敢放心用

单位上周开了个会,主题是"AI 提效",散会时领导补了一句:涉及客户资料的文档,不许往云端传。这话一出,会议室里本来跃跃欲试的同事全蔫了——大家平时用的那些在线 AI,文档一上传就不知道存哪儿去…

2026/11/1 1:56:37

华为OD机试真题 新系统 2026-10-28 JavaGoC【社交网络消息转发】

目录 题目 思路 Code 题目 题目内容: 在一个社交网络中,有 N 个用户(编号 0 到 N−1);每个用户都有一个「转发名单」(整数),该数二进制格式中的第 i 位为 1 表示此用户会把消息转发给第 i 个用户。 给定一个整数数组 forwardLists 和一个整数 initialSenders,请…

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑