【SpringBoot】数据验证之分组校验

分组校验

在不同情况下,可能对JavaBean对象的数据校验规则有所不同,有时需要根据数据状态对JavaBean中的某些属性字段进行单独验证。这时就可以使用分组校验功能,即根据状态启用一组约束。

Hibernate Validator的注解提供了groups参数,用于指定分组,如果没有指定groups参数,则默认属于javax.validation.groups.Default分组。下面通过示例演示分组校验。

首先,创建分组GroupA和GroupB,示例代码如下:

pubic interface GroupA{

}

public interface GroupB{

}

在上面的示例中,我们定义了GroupA和GroupB两个接口作为两个校验规则的分组。

然后,创建实体类User,并在相关的字段中定义校验分组规则,示例代码如下:

public class User{

@NotBlank(message="userId不能为空",groups={GroupA.class})

/**用户id**/

private Integer userId;

@NotBlank(message="用户名不能为空",groups={GrouA.class})

/*用户名*/

private String name;

@Length(min=30,max=40,message="必须在[30,40]",groups={GroupB.class})

@Length(min=20,max=30,message="必须在[20,30]"),groups={GroupA.class};

/*年龄*/

private int age;

}

在上面的示例中,age字段定义了GroupA和GroupB两个分组校验规则。GroupA的校验规则为年龄在20-30,GroupB的校验规则为年龄在30-40.

最后,使用校验分组:

@RequestMapping("/save")

public String save(@Request @Validated({GroupA.class,Default.class})

Person person,BindingResult result){

System.out.println(JSON.toJSONString(result.getAllErrors()));

return "success";

}

在上面的示例中,在@Validated注解中增加了{GroupA.class,Default.class}参数,表示对于定义了分组校验的字段使用GroupA校验规则,其他字段使用默认规则。

相关推荐
yoyoma1 分钟前
object 、 map 、weakmap区别
前端·javascript
shyshi2 分钟前
vercel 部署 node 服务和解决 vercel 不可访问的问题
前端·javascript
.生产的驴3 分钟前
React 模块化Axios封装请求 统一响应格式 请求统一处理
前端·javascript·react.js·前端框架·json·ecmascript·html5
前端大神之路4 分钟前
vue2 响应式原理
前端
一个努力的小码农4 分钟前
Rust中if let与while let语法糖的工程哲学
前端·rust
雾岛听风来5 分钟前
Android开发中常用高效数据结构
前端·javascript·后端
IT_陈寒6 分钟前
Vue 3性能优化实战:这5个Composition API技巧让你的应用快30%
前端·人工智能·后端
自在极意功。7 分钟前
Java static关键字深度解析
java·开发语言·面向对象·static
菜鸟的迷茫7 分钟前
Feign 超时 + 重试引发雪崩:一次线上事故复盘
java·后端
milanyangbo10 分钟前
谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑
java·服务器·开发语言·jvm·后端·算法·架构