当前位置:网站首页>@Validated 和 @Valid 的真正区别和使用方式
@Validated 和 @Valid 的真正区别和使用方式
2022-07-26 10:46:00 【Eric-x】
@Validated 和 @Valid 的区别主要在三个地方:注解位置、分组、嵌套校验
概述
- @Valid是使用 Hibernate validation 的时候使用
- @Validated是只用 Spring Validato r校验机制使用
说明:java的JSR303声明了@Valid这类接口,而Hibernate-validator对其进行了实现
@Validation对@Valid进行了二次封装,在使用上并没有区别,但在分组、注解位置、嵌套验证等功能上有所不同,这里主要就这几种情况进行说明。
注解位置
- @Validated:用在类型、方法和方法参数上。但不能用于成员属性(field)
- @Valid:可以用在方法、构造函数、方法参数和成员属性(field)上
如果@Validated注解在成员属性上,则会报不适用于field错误
分组校验
- @Validated:提供分组功能,可以在参数验证时,根据不同的分组采用不同的验证机制
- @Valid:没有分组功能
嵌套校验
一个待验证的pojo类,其中还包含了待验证的对象,需要在待验证对象上注解@Valid,才能验证待验证对象中的成员属性,这里不能使用@Validated。
举例:
需要约束校验的bean:
public class TeacherBean {
@NotEmpty(message = "老师姓名不能为空")
private String teacherName;
@Min(value = 1, message = "学科类型从1开始计算")
private int type;
}
public class StudentBean implements Serializable{
@NotBlank(message = "用户名不能为空")
private String name;
@Min(value = 18, message = "年龄不能小于18岁")
private Integer age;
@Pattern(regexp = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$", message = "手机号格式错误")
private String phoneNum;
@Email(message = "邮箱格式错误")
private String email;
@MyConstraint
private String className;
@NotNull(message = "任课老师不能为空")
@Size(min = 1, message = "至少有一个老师")
private List<TeacherBean> teacherBeans;
}
注意:
这里对teacherBeans只校验了NotNull, 和 Size,并没有对teacher信息里面的字段进行校验,
所以,这里一般需要把 @Valid 加上,如下
@Valid
@NotNull(message = "任课老师不能为空")
@Size(min = 1, message = "至少有一个老师")
private List<TeacherBean> teacherBeans;
参考链接:https://mp.weixin.qq.com/s/vErmG-x8zSYJoNCWLovndg
边栏推荐
猜你喜欢

0x00007FFD977C04A8 (Qt5Sqld.dll)处(位于 a.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突

IAR sprintf 浮点 在UCOS 总格式化成0.0的问题

2021-08-12函数递归_和鹏哥学习C语言

35. 搜索插入位置

【小程序】onReachBottom 事件为什么不能触发 ?(一秒搞定)

2021-08-12 function recursion_ Learn C language with brother Peng

Flutter编译报错 version of NDK matched the requested version 21.0.6113669. Versions available locally: 2

RT thread learning notes (I) -- configure RT thread development environment

349. 两个数组的交集

Sql Server 数据库之数据类型
随机推荐
剑指Offer(五十三):表示数值的字符串
Koin
C language callback function
回到顶部的几种方案(js)
Common classes (understand)
(转载)ArcGIS Engine中各种点的创建方法
Sql Server之查询总结
鹏哥C语言第四课(3)
按二进制数中1的个数分类
1748.唯一元素的和
C语言鹏哥20210812C语言函数
[leetcode daily question 2021/8/31] 1109. Flight reservation statistics [medium] differential array
RT-Thread 学习笔记(六)--- 开启基于SPI Flash的elmfat文件系统(上)
Successfully transplanted stemwin v5.22 on Shenzhou IV development board
Analysis of the transaction problem of chained method call
使用Selenium抓取zabbix性能监控图
SuperMap IClient for Leaflet 加载高斯克吕格投影三度分带CGCS2000大地坐标系WMTS服务
工厂模式详解
C#委托与匿名方法浅析
解决:无法加载文件 C:\Users\user\AppData\Roaming\npm\npx.ps1,因为在此系统上禁止运行脚本 。