当前位置: 首页 > news >正文

@Valid和@Vlidated的区别

@Valid 和 @Validated 注解的对比总结

1. 依赖关系

注解

依赖库/框架

额外配置要求

@Valid

JSR-380 (Bean Validation API)

仅需引入 javax.validation

或 Jakarta 规范实现(如 Hibernate Validator)

@Validated

Spring Framework

需 Spring Context 支持(通常通过 spring-boot-starter-validation

隐式引入)

2. 多种用法
@Valid 的典型场景
  • Controller 层参数校验(最常用):
java@PostMapping("/login")
public Result<String> login(@Valid @RequestBody LoginDTO loginDTO) {// 自动校验 LoginDTO 字段
}
    • 触发条件:仅需在参数上添加 @Valid,Spring MVC 通过 RequestResponseBodyMethodProcessor 自动处理校验。
  • 嵌套对象校验
javapublic class OrderDTO {@Validprivate UserDTO user; // 嵌套校验 UserDTO 的字段
}
@Validated 的典型场景
  • Service 层方法校验
java@Service
@Validated // 必须添加在类上
public class UserService {public void createUser(@Valid UserDTO userDTO) {// 自动校验 UserDTO}
}
  • 分组校验
javapublic interface UpdateGroup {}@Data
public class UserDTO {@NotNull(groups = UpdateGroup.class)private Long id;
}@RestController
@Validated // 必须添加在类上
public class UserController {@PutMappingpublic Result<?> update(@Validated(UpdateGroup.class) UserDTO dto) {// 仅校验 UpdateGroup 分组的规则}
}
  • 自定义校验逻辑(如 AOP)
java@Service
@Validated
public class OrderService {@CustomCheck // 自定义校验注解public void processOrder(OrderDTO order) {// 自定义校验逻辑通过 AOP 触发}
}
3. 核心区别

特性

@Valid

@Validated

作用层级

字段/方法参数级别(JSR-380 标准)

类/方法级别(Spring 扩展)

触发场景

显式注解即可触发

需在类/方法上声明

分组校验

❌ 不支持

✅ 支持(需配合 groups

属性)

嵌套校验

✅ 支持

✅ 支持

依赖要求

仅需 Bean Validation API

需 Spring Context 支持

Service 层使用

❌ 无法直接触发

✅ 必须通过 @Validated

注解类

自定义校验

❌ 需手动实现

✅ 支持(通过 AOP 或方法拦截)

4. 最佳实践
  • Controller 层
    • @RequestBody 参数使用 @Valid,无需添加 @Validated
    • 示例:
java@PostMapping("/login")
public Result<String> login(@Valid @RequestBody LoginDTO loginDTO) {// ...
}
  • Service 层
    • 如果需要校验方法参数,必须在类上添加 @Validated
    • 示例:
java@Service
@Validated
public class UserService {public void createUser(@Valid UserDTO userDTO) {// ...}
}
  • 分组校验
    • 必须使用 @Validated 并指定分组类。
    • 示例:
java@PutMapping
public Result<?> update(@Validated(UpdateGroup.class) UserDTO dto) {}
5. 验证流程对比

场景

触发校验的关键因素

@RequestBody + @Valid

Spring MVC 内置处理器自动触发

Service 层方法

@Validated

注解类 + @Valid

参数

分组校验

@Validated(group)

+ @Valid

参数

总结

  • @Valid 是 JSR-380 标准注解,轻量级且跨框架,适用于 Controller 层参数校验和嵌套对象校验。
  • @Validated 是 Spring 扩展注解,提供分组校验、Service 层校验和自定义校验逻辑等高级功能,需与 Spring 容器配合使用。
  • 根据场景选择:Controller 层用 @Valid,Service 层或复杂校验用 @Validated

相关文章:

  • JAVA集合(含List、Map、Set)(超详细版)
  • Mujoco 学习系列(六)官方教程 The introductory tutorial teaches MuJoCo basics
  • Java集合使用中的常见错误与最佳实践
  • Disruptor—3.核心源码实现分析一
  • 国际荐酒师(香港)协会亮相新西兰葡萄酒巡展深度参与赵凤仪大师班
  • 初识消息队列
  • DAY35
  • leetcode654.最大二叉树:递归分治下的最大值索引定位与树构建
  • QStandardItem的函数介绍
  • 2025第三届黄河流域网络安全技能挑战赛--Crypto--WriteUp
  • 服务器线上问题解决方案
  • Redis持久化之RDB
  • OSCP备战-mr-robot靶机详细解法
  • docker问题记录
  • 2025/5/25 学习日记 linux进阶命令学习
  • 有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(下)
  • 基于diffusion的图像编辑与inpaint
  • mysql数据库之备份
  • 【PhysUnits】13 减法操作(sub.rs)
  • 右键管理工具,让你电脑实用更加顺滑!
  • 做网站要多少钱 知乎/中国十大经典广告
  • 做盗版网站/搜狗网页搜索
  • 在线制作公司网站/网络推广需要什么
  • 邯郸网站建设费用/发帖效果好的网站
  • 长沙专业网站设计/seo外包服务方案
  • 四川建设厅网站打不开/关键词挖掘查询工具