程序地带

@Validated和@Valid的区别 及使用


概述:

@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

随机推荐

element-ui el-select 添加全选多选功能

element-ui el-select 添加全选多选功能

element-uiel-select添加全选多选功能入职位新单位两个多月,最近写的也是一些小的功能组件,这也是第一篇,今天就关于el-select添加全选多选功能,写一个刚入行的人的小办法.由于在网...

八神异步 阅读(165)

10大高性能开发宝石,我要消灭一半程序员!

10大高性能开发宝石,我要消灭一半程序员!

这篇文章,我们循序渐进,从内存、磁盘I/O、网络I/O、CPU、缓存、架构、算法等多层次递进,串联起高性能开发十大必须掌握的核心技术。-I/O优化࿱...

嵌入式资讯精选 阅读(724)

SINO ENGLISH 0000-1000

SINO ENGLISH 0000-1000

0000100010011002100310041005100610071008100910101011...

weixin_46640029 阅读(812)

Redis分布式锁

在多线程并发的情况下,我们可以使用锁来保证一个代码块在同一时间内只能由一个线程访问。比如Java的synchronized关键字和Reentrantlock类等等。这样子可以保证在同一个...

qq_30326609 阅读(684)

快速设置 Git 默认分支由 master 变为 main

master修改为maingithub默认创建的新项目的分支为main所以,本人也跟随变化,将本地client的git也设置Git默认分支由master变为main。前提条...

[shenhonglei] 阅读(807)

在线教育直播与录播一文解析

随着科技的高速发展和情势所需,在线教育直播在2020年大受欢迎。在直播大放异彩的同时,录播黯然失色,但录播真的没有用了吗?其实不然,...

talk_fun2015 阅读(872)