概述:
@Valid是使用Hibernate validation的时候使用
@Validated是只用Spring Validator校验机制使用
说明:java的JSR303声明了@Valid这类接口,而Hibernate-validator对其进行了实现
@Validation对@Valid进行了二次封装,在使用上并没有区别,但在分组、注解位置、嵌套验证等功能上有所不同,这里主要就这几种情况进行说明。
注解位置:
@Validated:用在类型、方法和方法参数上。但不能用于成员属性(field)
@Valid:可以用在方法、构造函数、方法参数和成员属性(field)上
如果@Validated注解在成员属性上,则会报 不适用于field错误
分组校验:
@Validated:提供分组功能,可以在参数验证时,根据不同的分组采用不同的验证机制
@Valid:没有分组功能
嵌套校验:
一个待验证的pojo类,其中还包含了待验证的对象,需要在待验证对象上注解@Valid,才能验证待验证对象中的成员属性,这里不能使用@Validated。
约束性注解(简单)说明
注解功能@AssertFalse可以为null,如果不为null的话必须为false@AssertTrue可以为null,如果不为null的话必须为true@DecimalMax设置不能超过最大值@DecimalMin设置不能超过最小值@Digits设置必须是数字且数字整数的位数和小数的位数必须在指定范围内@Future日期必须在当前日期的未来@Past日期必须在当前日期的过去@Max最大不得超过此最大值@Min最大不得小于此最小值@NotNull不能为null,可以是空@Null必须为null@Pattern必须满足指定的正则表达式@Size集合、数组、map等的size()值必须在指定范围内@Email必须是email格式@Length长度必须在指定范围内@NotBlank字符串不能为null,字符串trim()后也不能等于“”@NotEmpty不能为null,集合、数组、map等size()不能为0;字符串trim()后可以等于“”@Range值必须在指定范围内@URL必须是一个URL
@Valid @Validated 数据校验之嵌套校验
常见问题
起因: 项目接到新需求,第三方接口商会一次传多条数据,需要增加新的方法来接收List类型参数,但是只使用@Validated无法对list内部的数据进行验证。
解决方法: @Valid @Validated 同时使用 @Valid加在接收json的参数上 @Validated加在控制层的类上
参考文章
https://blog.csdn.net/herojuice/article/details/86020101 https://blog.csdn.net/weixin_41945228/article/details/97276847
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40820739/article/details/111246223