JSR303(@Null、@NotNull、@NotEmpty等)注解中groups的作用
案例
同一个实体类,在登陆接口的时候我们需要校验用户名和密码,但是其他接口我们不需要校验用户名和密码,反而需要校验key,此时就可以使用groups 。
注意事项
- 控制层 记得加上 @Validated 注解
- groups里面的参数是接口而不是类 如果是类会报如下错误
3.如果实体类没有加上分组参数 控制层里加上了分组参数,那么是不会对他进行校验的。
准备 实体类 接口 控制层
// 实体类
@Data
public class Test {
@NotNull(message = "用户名不能为空",groups = {TestInterface.class})
private String username;
@NotNull(message = "密码不能为空",groups = {TestInterface.class,TestInterface2.class})
private String password;
@NotNull(message = "key不能为空")
private String key;
}
// 2个接口 因为 注解里面的groups 是一个数组 可以写多个
// 第一个
public interface TestInterface1 {
}
// 第二个
public interface TestInterface2 {
}
//控制层
@RestController
public class TestController {
@PostMapping("test1")
public void test2(@Validated() @RequestBody Test test){
System.out.println(test);
}
@PostMapping("test2")
public void test1(@Validated(value = {TestInterface1.class}) @RequestBody Test test){
System.out.println(test);
}
@PostMapping("test3")
public void test4(@Validated(value = {TestInterface2.class}) @RequestBody Test test){
System.out.println(test);
}
@PostMapping("test4")
public void test3(@Validated(value = {TestInterface1.class,TestInterface2.class})@RequestBody Test test){
System.out.println(test);
}
}
访问接口及结果
4个接口统一携带的参数
{
"username": null,
"password": null,
"key": null
}
此项目加上了全局异常处理 所以返回的报错信息不是原来的
test1接口
只会校验 key字段 因为 实体类和controller都没有在注解里面加上分组参数。当然此时key不传入null,这个接口是不会报错的。
test2接口
校验了用户名和密码,实体类和controller都有在注解里面加上分组参数。注:此时根本不会校验key。
test3接口
校验了密码,实体类和controller都有在注解里面加上分组参数。注:此时根本不会校验key和用户名
test4接口
校验了用户名和密码,实体类和controller都有在注解里面加上分组参数。注:此时根本不会校验key。