javaBean验证框架(9)—分组验证
来源:互联网 发布:多线程经典案例 java 编辑:程序博客网 时间:2024/05/16 13:45
javaBean验证框架(9)—分组验证
约束可以与组进行关联,每个约束一定有group=Class<?>[]
元素,组是空的接口,作为指定强类型组的方式。利用组可以实现在运行验证过程中限定一组约束。
组验证
当启动验证过程时,我们可以通过Validator#validate(T object, Class<?> groups)
指定验证组。下面通过示例说明:
package com.dataz.groups;public interface GroupName {}package com.dataz.groups;public interface GroupAddress {}
被验证实体类:
package com.dataz.entity;import com.dataz.groups.GroupAddress;import com.dataz.groups.GroupName;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;public class User { @NotNull(groups = GroupName.class) String firstName; @NotNull(groups = GroupName.class) String lastName; @NotNull(groups = GroupAddress.class) String streetAddress; @NotNull(groups = GroupAddress.class) String country; @NotNull(groups = GroupAddress.class) @Size(min = 5, groups = GroupAddress.class) String zipCode; @NotNull String groupId; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getStreetAddress() { return streetAddress; } public void setStreetAddress(String streetAddress) { this.streetAddress = streetAddress; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getZipCode() { return zipCode; } public void setZipCode(String zipCode) { this.zipCode = zipCode; } public String getGroupId() { return groupId; } public void setGroupId(String groupId) { this.groupId = groupId; }}
使用一个组进行验证代码:
User user = new User();user.setFirstName("Jennifer");// user.setLastName("Wilson");Set<ConstraintViolation<User>> constraintViolations = validator.validate(user, GroupUserName.class);if (constraintViolations.size() > 0) { constraintViolations.stream().forEach( ConstraintGroupExample::printError);} else { //proceed using user object System.out.println(user);}
输出:
lastName may not be null
使用两个组进行验证代码:
User user = new User();user.setFirstName("Jennifer");// user.setLastName("Wilson");Set<ConstraintViolation<User>> constraintViolations = validator.validate(user, GroupUserName.class, GroupAddress.class);if (constraintViolations.size() > 0) { constraintViolations.stream().forEach( ConstraintGroupExample2::printError);} else { //proceed using user object System.out.println(user);}
country may not be null
zipCode may not be null
lastName may not be null
streetAddress may not be null
不带任何做进行验证:
如果不指定组,默认为缺省组,示例中只有一个约束userId为缺省组。
User user = new User();
user.setFirstName(“Jennifer”);
// user.setLastName(“Wilson”);
Set
组验证顺序
缺省情况,约束组验证没有特定顺序,但我们可以指定验证顺序。通过带注解@GroupSequence的接口实现。
该注解不仅指定顺序,如果有一个验证失败,则下一组约束将不被执行。这和前面的示例不同,因为之前是所有验证一起执行。
我们看如何定义组顺序接口:
import javax.validation.GroupSequence;import javax.validation.groups.Default;@GroupSequence({Default.class, GroupUserName.class, GroupAddress.class})public interface GroupSequenceForUser {}
现在将按照组顺序进行验证,第一组为默认组,如果没有错误,GroupUserName组进行验证,没有错误则GroupAddress组开始验证。
为达到效果,验证时传入顺序接口。
User user = new User();
Set
重新定义组顺序
组顺序有个很好的特点,使用@GroupSequence
接口代替顺序接口,在验证实体上指定验证顺序注解。
@GroupSequence({User2.class, GroupUserName.class, GroupAddress.class}) public class User2 { @NotNull(groups = GroupUserName.class) String firstName; @NotNull(groups = GroupUserName.class) String lastName; @NotNull(groups = GroupAddress.class) String streetAddress; @NotNull(groups = GroupAddress.class) String country; @NotNull(groups = GroupAddress.class) @Size(min = 5, groups = GroupAddress.class) String zipCode; @NotNull String userId; // getters and setters}
因为组不能循环依赖,所以不能增加缺省组,应使用被验证类自身作为缺省组。
验证代码如下:
User2 user = new User2();Set<ConstraintViolation<User2>> constraintViolations = validator.validate(user);if (constraintViolations.size() > 0) { constraintViolations.stream().forEach( RedefiningDefaultGroupExample::printError);} else { //proceed using user object System.out.println(user);}
userId may not be null
总结
本文介绍了分组验证及分组验证顺序。在实际项目中相同字段在不同业务场景有不同验证规则,需使用分组规则来解决。
- javaBean验证框架(9)—分组验证
- javaBean验证框架(3)—验证消息
- javaBean验证框架(1)—概述
- javaBean验证框架(4)—自定义约束
- javaBean验证框架(8)—使用@valid实现集合验证
- SpringMVC验证框架Validation分组验证
- javaBean验证框架(5)—自定义类级别约束
- javaBean验证框架(6)—附加约束和组合约束
- javaBean验证框架(7)—使用@valid实现对象关联验证
- jsp—+JavaBean注册验证
- JavaBean使用实例——注册验证
- JavaBean表单验证
- javabean实现注册验证
- JSP+JavaBean注册验证
- javaBean字段验证
- 验证控件分组
- jQuery validate 分组验证
- jquery formValidator 分组验证
- Git信息泄露搜索的一些工具总结
- 全文检索之Lucene和Solr
- Python3与OpenCV3.3 图像处理(八)--模糊
- 内核模块的Makefile文件
- windows环境下安装npm、cnpm、bower
- javaBean验证框架(9)—分组验证
- 在easyUI中把form表单转换成json数据利用datagrid的load方法实现条件查询
- aapt 命令可应用于查看apk包名、主activity、版本等信息
- Finding Invisible Pattern
- 怎样在 Linux 系统中恢复被删除文件
- Redis 主从复制
- 饿了么大数据平台建设
- hibernate系列六:使用MyEclipse实现hibernate反向工程
- openwrt安装python整理