辽宁建设工程信息网清单怎么,宁波百度推广优化,wordpress分享点赞,wordpress搭建多个购物网站文章目录 Valid#xff1a;专注单个对象的深度验证适用场景使用示例小结 Validated#xff1a;聚焦接口分组的批量验证适用场景使用示例小结 主要区别总结如何选择#xff1f;总结推荐阅读文章 在 Java 开发中#xff0c;为了确保输入数据符合我们的要求#xff0c;少不了… 文章目录 Valid专注单个对象的深度验证适用场景使用示例小结 Validated聚焦接口分组的批量验证适用场景使用示例小结 主要区别总结如何选择总结推荐阅读文章 在 Java 开发中为了确保输入数据符合我们的要求少不了数据验证这一步。
Valid 和
Validated 是两个常见的验证注解它们在 Spring 中常常出现虽然名字差不多但作用和使用场景却不太一样。 今天我们就来聊聊 Valid 和 Validated 的区别看它们如何在验证世界里各司其职搭配使用 Valid专注单个对象的深度验证
Valid 是 Java 中的标准验证注解适用于单个对象的验证。它的职责很清晰——递归地验证这个对象尤其适用于嵌套对象的场景。
比如你的表单里有个 User 对象User 里还有 Address 对象那么在验证 User 时如果用了 Valid它会一层层地深入到 Address对所有字段进行完整验证。
适用场景
Valid 更适合在字段上进行深层次的验证比如
方法参数在方法参数前标注 Valid让 Spring 验证参数。嵌套对象在对象内部的字段上使用 Valid确保递归验证。
使用示例
public class User {NotNullprivate String name;Valid // 在嵌套对象 Address 上使用 Validprivate Address address;
}public class Address {NotBlankprivate String city;
}在这个例子中Valid 会确保 User 对象的 address 字段也被验证。因此如果 address 的 city 是空字符串也会报错。
小结
Valid 是一种“全家桶”式的验证器用来递归检查整个对象树的各个字段是否符合要求。 Validated聚焦接口分组的批量验证
Validated 是 Spring 特有的验证注解和 Valid 不同的是它的主要优势在于支持验证分组。分组验证的概念很简单比如我们在用户注册时要验证的内容和在用户更新资料时可能不同。Validated 就允许你给验证分组灵活地控制哪些验证规则在何时触发。
适用场景
分组验证需要在不同情况下使用不同的验证规则时Validated 是非常合适的选择。
使用示例
假设我们有两个验证场景一个是 AddGroup新增用户时的验证一个是 UpdateGroup更新用户时的验证可以这样做
public class User {NotNull(groups AddGroup.class)private String name;NotBlank(groups UpdateGroup.class)private String email;
}public interface AddGroup {}
public interface UpdateGroup {}在控制器方法中指定使用哪个分组
PostMapping(/addUser)
public void addUser(Validated(AddGroup.class) RequestBody User user) {// 仅验证 AddGroup 分组
}PutMapping(/updateUser)
public void updateUser(Validated(UpdateGroup.class) RequestBody User user) {// 仅验证 UpdateGroup 分组
}这样通过 Validated 注解和分组你可以在不同操作中有选择地应用不同的验证逻辑。
小结
Validated 是一位“分组专家”适合复杂场景下的批量验证。 主要区别总结
注解验证对象支持分组验证适用场景Valid单个对象递归验证否深度验证嵌套对象Validated批量验证可以选择性验证是在不同业务场景下应用不同验证逻辑
如何选择
需要递归验证单个对象的各个字段尤其是嵌套的复杂对象用 Valid。需要在不同操作中选择性验证字段比如新增和更新的验证规则不同用 Validated并分配分组。 总结
Valid 是“单体专家”适合一层层深入对象结构逐个检查字段。Validated 是“分组大拿”让你灵活控制不同场景下的验证要求。
理解这两个注解的分工后就可以让你的 Java 应用在数据验证上更严谨、更灵活啦
推荐阅读文章
由 Spring 静态注入引发的一个线上T0级别事故真的以后得避坑如何理解 HTTP 是无状态的以及它与 Cookie 和 Session 之间的联系HTTP、HTTPS、Cookie 和 Session 之间的关系什么是 Cookie简单介绍与使用方法什么是 Session如何应用使用 Spring 框架构建 MVC 应用程序初学者教程有缺陷的 Java 代码Java 开发人员最常犯的 10 大错误如何理解应用 Java 多线程与并发编程把握Java泛型的艺术协变、逆变与不可变性一网打尽Java Spring 中常用的 PostConstruct 注解使用总结如何理解线程安全这个概念理解 Java 桥接方法Spring 整合嵌入式 Tomcat 容器Tomcat 如何加载 SpringMVC 组件“在什么情况下类需要实现 Serializable什么情况下又不需要一”“避免序列化灾难掌握实现 Serializable 的真相二”如何自定义一个自己的 Spring Boot Starter 组件从入门到实践解密 Redis如何通过 IO 多路复用征服高并发挑战线程 vs 虚拟线程深入理解及区别深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别10大程序员提升代码优雅度的必杀技瞬间让你成为团队宠儿“打破重复代码的魔咒使用 Function 接口在 Java 8 中实现优雅重构”Java 中消除 If-else 技巧总结线程池的核心参数配置(仅供参考)【人工智能】聊聊Transformer深度学习的一股清流(13)Java 枚举的几个常用技巧你可以试着用用