@Validated的分组特性

介绍一下这样的场景:在对用户的帐号密码进行编辑保存以及新增是两种不一样的情况。

编辑修改->保存:只需要验证username与password是否符合条件即可,不需要验证id(因为在数据库中id已经存在)。

新增->保存:新增需要验证username与password是否符合条件,还要验证id。

这时候就用到groups分组分情况对Bean属性变量进行验证,也可以满足多验证。具体的需要一下两个步骤

第一步:创建分组接口类


分组接口类只是普通的接口类并没有多大意义,只是用来标识这个属性哪种情况下被验证,这类似于java.io.Serializable  

public interface addUser{ 

public interface editUser{

}

第二步:Controller方法参数中增加xxx.class接口

在对新增的用户进行ID验证,增加@Validated({addUser.class})接口类用来表示新增的User.getId()需要验证。

 

@Controller  

public class UserController {  

  

    @RequestMapping("/saveAdd")  

    public String saveAddUser(@Validated({addUser.class}) User user, BindingResult result) {  

        if(result.hasErrors()) {  

            return "error";  

        }  

        return "success";  

    }

第三步:Bean中添加groups分组

在User实体类中添加groups分组@NotEmpty(groups={addUser.class})与UserController中@Validated({addUser.class})对应,说明在执行saveAddUser新增用户的情况下,才对新增的用户id进行验证。

 

public class User {   

    //在分组addUser时,验证id不能为空,其他情况下不做验证

    @NotEmpty(groups={addUser.class})

    private String id;

    @NotEmpty(message = "用户名不能为空")

    private String username;

    @Size(min=6 ,max= 20 ,message = "密码最少6位,最高20位")

    private String password;

   ......

}

以上三步就可以简单地完成分组验证,但是对分组验证补充一下三点:

第一是:不分配groups分组时,默认每次都需要验证。

第二是:通过groups分组可以对同一个变量进行多个验证,如下代码

 

//对用户名进行两次不同情况的验证。

@NotEmpty(groups={First.class})

@Size(min=1,max=10,groups={Second.class})

public String username; 


第三是:默认的情况下,不同的分组约束验证是无序的,但是在有些情况下验证的相互约束很重要(比如前一个组验证失败,后面的将不再验证等情况),所以groups分组的验证也有前后验证顺序。使用@GroupSequence注解进行排序。

 

/*

 * 分组顺序接口类

 */

import javax.validation.GroupSequence;

//分组序列先Frist再Second

@GroupSequence({First.class,Second.class})

public interface Group{

}

 

@Controller  

public class UserController {  

  

    @RequestMapping("/saveAdd")  

    public String saveAddUser(@Validated({Group.class}) User user, BindingResult result) {  

        if(result.hasErrors()) {  

            return "error";  

        }  

        return "success";  

    }

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值