javabean 验证提供了一个工具来验证对象,对象成员,方法和构造函数。下面介绍一下bean验证验证约束。使用bean验证模型是由注解形式来支持的,在javax.validataion.constrainsts包中提供很多内置约束。
1,bean验证约束
(1)@AsserFalse
字段的值必须是false.
(2)@AsserTrue
字段的值必须是true.
(3)@DecimalMax
字段的值必须是一个小数值,应小于或者等于value元素中的数
(4)@DecimalMin
字段的值必须是一个小数值,应该大于或者等于value元素中的数
(5)@Digits
字段必须是指定范围内的一个数,integer元素指定了这个数的最大小整数位数,ftaction元素指定这个数的最大小数
(6)@Future
字段的值必须是将来一个日期
(7)@Max
字段必须是一个整数类型,应该小于或者等于value的数
(8)@Min
字段必须一个整数类型,应该大于或者等于value的数
(9)NotNull
字段的值必须不能为空
(10)@Null
字段的值必须为空
(11)@Past
字段的值必须是过去的一个日期
(12)@Pattern
字段的值必须与正则表达式匹配
(13)@Size
字段的大小,必须指定在一个范围匹配
2, Hibernate Validator
(1)@Email
该元素的值必须是电子邮箱格式
(2)@Length
该元素的长度必须在这个字符串范围之内
(3)@NotEmpty
该元素的值必须非空
(4)@Range
该元素必须在范围之内
3.项目应用
3.1.在pom.xml引用
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
3.2.在bean对象使用注解
package com.design.module.entity;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import org.apache.ibatis.type.Alias;
import org.hibernate.validator.constraints.Length;
import com.design.framework.base.entity.BaseEntity;
import com.design.framework.validata.group.Add;
import com.design.framework.validata.group.Update;
/**
* 用户
*
* @author John
* @datatime 2018-09-11 16:54:18
*/
@Alias(value = "user")
@Table(name = "tm_user_info")
public class User extends BaseEntity<String> {
private static final long serialVersionUID = 1L;
private String orgId;
private String userCode;
@NotNull(message = "用户名不能为空",groups={Add.class,Update.class})
private String userName;
@Length(max=2)
@NotNull(message = "密码不能为空",groups={Add.class,Update.class})
private String userPassword;
private Integer userSex;
private String userPhone;
private String managerId;
private String deptId;
private String userMail;
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getOrgId() {
return orgId;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
public String getUserCode() {
return userCode;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String getUserPassword() {
return userPassword;
}
public void setUserSex(Integer userSex) {
this.userSex = userSex;
}
public Integer getUserSex() {
return userSex;
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone;
}
public String getUserPhone() {
return userPhone;
}
public void setManagerId(String managerId) {
this.managerId = managerId;
}
public String getManagerId() {
return managerId;
}
public void setDeptId(String deptId) {
this.deptId = deptId;
}
public String getDeptId() {
return deptId;
}
public void setUserMail(String userMail) {
this.userMail = userMail;
}
public String getUserMail() {
return userMail;
}
}
3.3自定义一个检验bean工厂
import java.util.Iterator;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import com.design.framework.validata.bean.ValidationResult;
/**
* 自定义检验bean工厂
* @author JohnDeng
* @datatime 2019年1月30日下午2:34:37
* @param <T>
*/
public class ValidatorBeanFactory<T> {
public boolean validataBean(T t, ValidationResult result,Class<?>... groups) {
// 通过 Validation 构造 DefaultValidatorFactory 工厂
ValidatorFactory hvf = Validation.buildDefaultValidatorFactory();
// 通过 ValidatorFactory 获取 validate
Validator validator = hvf.getValidator();
// 通过 Validator 验证 实例 返回 ConstraintViolation<T> 集合
Set<ConstraintViolation<T>> cvs = validator.validate(t, groups);
// 获取 迭代器
Iterator<ConstraintViolation<T>> ite = cvs.iterator();
while (ite.hasNext()) {
ConstraintViolation<T> cv = ite.next();
// 获取 验证错误 信息 message
result.setMessage(cv.getMessage());
// 获取错误的字段名称
result.setPath(cv.getPropertyPath());
return true; }
return false;
}
}
3.4添加检验分组
/**
* 检验新增分组
* @author JohnDeng
* @datatime 2019年1月25日上午11:00:12
*/
public interface Add {
}
/**
* 检验修改分组
* @author JohnDeng
* @datatime 2019年1月25日上午11:03:06
*/
public interface Update {
}
3.5.添加检验返回类
import javax.validation.Path;
/**
* 检验返回的结果
* @author JohnDeng
* @date 2018年8月8日下午3:42:18
*/
public class ValidationResult {
/**
* 字段名
*/
private String fieldName;
/**
* 获取 验证错误 信息 message
*/
private String message;
/**
* 获取错误的字段名称
*/
private Path path;
public Path getPath() {
return path;
}
public void setPath(Path path) {
this.path = path;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
3.6测试
import com.design.framework.validata.ValidatorBeanFactory;
import com.design.framework.validata.bean.ValidationResult;
import com.design.framework.validata.group.Add;
import com.design.module.entity.User;
public class SpringBeanValidtionTest extends BaseTest {
@Test
public void test(){
User user=new User();
user.setUserName("test");
ValidationResult validationResult=new ValidationResult();
ValidatorBeanFactory<User> validator =new ValidatorBeanFactory<User> ();
validator.validataBean(user,validationResult,Add.class);
System.out.println(validationResult.getMessage());
}
}
测试输出结果: