JSR303(@Null、@NotNull、@NotEmpty等)注解中groups的作用

本文介绍了JSR303在Java中的使用,特别是在实体类校验中的分组校验功能。通过案例展示了如何在不同接口中使用@NotNull等注解的groups属性,实现对特定字段的按需校验。例如,登录接口校验用户名和密码,其他接口校验key。控制层需添加@Validated注解,并指定校验分组,以实现灵活的验证逻辑。
摘要由CSDN通过智能技术生成

案例

同一个实体类,在登陆接口的时候我们需要校验用户名和密码,但是其他接口我们不需要校验用户名和密码,反而需要校验key,此时就可以使用groups 。

注意事项

  1. 控制层 记得加上 @Validated 注解
  2. 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。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值