spring bean validation(jsr-303)详细介绍和应用

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());
	}
}

测试输出结果:
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值