前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot2.x系列教程(二十一)参数分组校验

SpringBoot2.x系列教程(二十一)参数分组校验

作者头像
程序新视界
发布2020-02-13 10:33:15
8290
发布2020-02-13 10:33:15
举报
文章被收录于专栏:丑胖侠

在使用注解进行参数校验时还有这样的一个场景:同样的一个Java对象,在不同的接口中需要校验的参数不同,那么此时如果将两个接口的校验都进行校验,有可能出现误判情况。

比如如下User对象:

代码语言:javascript
复制
@Data
public class User {
	private String username;
	private String userDetail;
}

A接口只需校验username不为空,B接口只需校验userDetail不为空,那么此时该如何处理呢?

针对此中情况,Spring Boot提供了分组的功能,这也是本文将要讲解的重点。

Valid和Validated的区别

在解决上述问题之前,先来了解一下Valid和Validated的区别。

Spring Validation验证框架对参数的验证机制提供了@Validated(Spring’s JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR-303规范),配合BindingResult可以直接提供参数验证结果。

在检验Controller的入参时,这两个注解在基本验证功能上没有太多区别。但是在分组、注解地方、嵌套验证等功能上两个有所不同。

@Validated提供了分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制。

@Validated可以用在类、方法和方法参数上,但是不能用在成员属性(字段)上。@Valid可以用在方法、构造函数、方法参数和成员属性(字段)上。

了解了它们的基本区别,因此,我们这里所讲的参数校验分组就是基于@Validated实现的。

分组实例

分组的基本操作与前面讲到的@JsonView的分组类似,如果学习过前面的内容可进行参考。

这里我们在User对象内定义两个用于分组标识的接口。具体定义如下:

代码语言:javascript
复制
@Data
public class User {

	@NotEmpty(gro
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Valid和Validated的区别
  • 分组实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档