
Springboot @Validated与@Valid深度解析
版权申诉
132KB |
更新于2024-09-12
| 183 浏览量 | 举报
收藏
在SpringBoot开发中,数据校验是一个重要的部分,确保传入的数据符合预期格式和规则。`@Validated` 和 `@Valid` 是两个常用的校验注解,它们在不同的场景下有不同的应用。下面将详细介绍这两个注解的区别以及如何使用。
首先,`@Valid` 是基于 Java 的 JSR303 规范,由 Hibernate Validator 实现的。它主要用于校验对象的属性,可以应用于方法、构造函数、方法参数以及成员属性上。例如,你可以在一个表单提交的控制器方法中,使用 `@Valid` 注解来校验请求参数对象。
```java
@PostMapping("/students")
public ResponseEntity<?> createStudent(@Valid Student student) {
// ...
}
```
在这个例子中,`Student` 类的属性会被 Hibernate Validator 进行校验。
相比之下,`@Validated` 是 Spring 提供的注解,它使用的是 Spring 自己的校验机制,不完全遵循 JSR303。`@Validated` 主要用于 Spring MVC 的数据绑定和验证,它只能应用于类型、方法和方法参数,不能直接用于成员属性。如果尝试在字段上使用 `@Validated`,编译器会报错。
```java
@PostMapping("/students")
public ResponseEntity<?> createStudent(@Validated Student student) {
// ...
}
```
尽管 `@Valid` 和 `@Validated` 在基本的校验功能上相似,但在一些高级特性上存在差异。比如分组校验。
在分组校验方面,`@Validated` 提供了支持,允许你根据不同的分组定义不同的校验规则。这样,你可以控制在不同情况下执行哪些校验。例如:
```java
public interface GroupA {}
public interface GroupB {}
public class StudentBean implements Serializable {
@NotBlank(message = "用户名不能为空")
private String name;
@Min(value = 18, message = "年龄不能小于18岁", groups = {GroupB.class})
private Integer age;
// ...
}
```
在这个例子中,`age` 属性只有在分组为 `GroupB` 时才会进行校验。
而 `@Valid` 不具备这样的分组功能,如果你需要实现类似的功能,需要自定义校验逻辑或者使用其他方式。
此外,`@Validated` 和 `@Valid` 在嵌套验证上的处理也有所不同。`@Valid` 可以自动递归地验证对象的属性,即使这些属性是复杂类型。而 `@Validated` 需要配合 `@Valid` 使用才能实现嵌套验证。
`@Valid` 更倾向于遵循标准的 JSR303 规范,适用于更广泛的场景;而 `@Validated` 是 Spring 提供的特定于 Spring MVC 的解决方案,它在某些特性上提供了更灵活的配置,如分组校验。在实际开发中,选择哪一个取决于你的具体需求和项目框架。
相关推荐










weixin_38747233
- 粉丝: 8
最新资源
- 解锁文件困扰?使用Unlocker一键解决
- 网店模板下载:支持多平台支付与SEO优化
- MATLAB系统分析与设计在数学建模中的应用
- Java Web Services精要教程详解
- FCKeditor 2.6使用说明与下载
- Java高级特性:动态代理、反射与数据库连接池详解
- Protel99se软件操作全面训练教程
- 45度斜视角地图编辑器深度解析与源码下载
- 深入讲解Acegi Java权限验证框架教程及实例
- 软件工程专业大学生课程设计指南
- 网络问题一招解决:自动修复工具使用指南
- 锐起无盘IMG编辑器:高效管理大型数据上传
- UDP协议的Java客户端与服务器程序代码解析
- delphi +Access打造的贸易公司管理系统
- Java初学者的完整教程课件下载
- 免费VB6应用软件学习工具下载
- C#与ASP.NET打造高效在线文件管理解决方案
- 基于C#的生产管理系统开发指南
- Symbian开发资料:BmpProgCtrlDemo示例解析
- BFC采集器4.6:高效自动化网站数据采集工具
- ASP.NET+C#图片缩微处理代码示例
- 网络版学生档案课程表管理系统v1.0使用说明
- 北大青鸟PHP经典课件下载
- Silverlight2+C#参数传递示例:Forms窗体导航代码