@NotNull 注解中groups 的用法

本文介绍如何在Java中通过配置@NotNull注解的groups属性实现不同接口对User对象字段的差异化验证。通过使用@Validated替代@Valid,并指定验证组,可以灵活控制哪些字段需要进行非空检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来:

@Data
public class User {

    private Integer id;
    @NotNull(message = "用户名不能为空")
    private String username;
    @NotNull(message = "密码不能为空")
    private String password;
}
    @GetMapping("login")
    public Result login(@Valid User user) {
		System.out.println("测试@notNull注解");
        //验证密码操作省略
        return Result.suc();
    }

问题

现在是登录接口我们只需要判断username和password,如果是别的接口也是用User类接收的,但是username和password可以为空怎么办?
在NotNull注解里面配置group,需要验证的时候,就在controller参数注解中加上这个groups名称

  1. 修改User类,配置了一下username内的groups为TestNotNull.class,groups里面的class需要为接口,可以用service的接口,也可以重新创建
  2. controller中,没有使用@Valid注解了,而是要使用@Validated,里面value代表的是,在User类里面@NotNull注解里面配置了groups里面有TestNotNull.class的字段判断会生效
    那么当前配置的话,就只会判断username是否为空,而password因为没有配置同样的groups属性,所以不会生效
@Data
public class User {

    private Integer id;
    @NotNull(message = "用户名不能为空",groups = {TestNotNull.class})
    private String username;
    @NotNull(message = "密码不能为空")
    private String password;
}
  @GetMapping("test")
    public Result test(@Validated(value = {TestNotNull.class}) User user) {
        System.out.println("测试@notNull注解");
        //验证密码操作省略
        return Result.suc();
    }

参考https://blog.youkuaiyun.com/weixin_44906271/article/details/105844930?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduend~default-3-105844930.nonecase&utm_term=notnull%E6%B3%A8%E8%A7%A3groups&spm=1000.2123.3001.4430

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值