Hibernate Validator 后台数据规则校验拓展

目录

 1.dto

1-1.UserInfo

2.rules

2-1.after

2-1-1.UserInfoAfterRuleValid.java

 2-2.before

2-2-1.UserInfoBeforeRuleValid.java

2-3.valid

2-3-1.UserInfoValidServiceImpl.java

3.validator

3-1.service

3-1-1.AfterRuleValidService.java

3-1-2.BeforeRuleValidService.java

3-1-3.RuleValidService.java

3-2.RulesValid.java

3-3.RuleValidator.java

4.test

4-1.Main.java


依赖包:

jboss-logging-3.3.2.Final.jar

validation-api-2.0.1.Final.jar

commons-lang-2.5.jar

classmate-1.3.4.jar

hibernate-validator-6.0.12.Final.jar


本文利用Hibernate Validator校验工具进行拓展,旨于代码优化与规则校验集中管理。

转载请注明出处:https://blog.csdn.net/jevonsCSDN/article/details/88047276 【Jevons’Blog】

代码结构:

下面开始贴代码: 

 1.dto

1-1.UserInfo

package validator.dto;

import javax.validation.constraints.NotNull;

import validator.rules.after.UserInfoAfterRuleValid;
import validator.rules.before.UserInfoBeforeRuleValid;
import validator.rules.valid.UserInfoValidServiceImpl;
import validator.validator.RulesValid;

@RulesValid(vaildClass = { UserInfoValidServiceImpl.class },beforeClass={UserInfoBeforeRuleValid.class},afterClass={UserInfoAfterRuleValid.class})
public class UserInfo {
	@NotNull
	private java.lang.String insurantName;
	
	private java.lang.String insurantCertiType;
	
	private java.lang.String insurantCertiNo;
 
	private java.lang.String insurantGender;
	
	private java.lang.String insurantMobile;
	
 
	/**
	 * insurantName
	 */
	public java.lang.String getInsurantName() {
		return insurantName;
	}
	/**
	 * insurantName
	 */
	public void setInsurantName(java.lang.String insurantName) {
		this.insurantName = insurantName;
	}
	/**
	 * insurantCertiType
	 */
	public java.lang.String getInsurantCertiType() {
		return insurantCertiType;
	}
	/**
	 * insurantNertiType
	 */
	public void setInsurantCertiType(java.lang.String insurantCertiType) {
		this.insurantCertiType = insurantCertiType;
	}
	/**
	 * insurantCertiNo
	 */
	public java.lang.String getInsurantCertiNo() {
		return insurantCertiNo;
	}
	/**
	 * insurantCertiNo
	 */
	public void setInsurantCertiNo(java.lang.String insurantCertiNo) {
		this.insurantCertiNo = insurantCertiNo;
	}
	/**
	 * insurantGender
	 */
	public java.lang.String getInsurantGender() {
		return insurantGender;
	}
	/**
	 * insurantGender
	 */
	public void setInsurantGender(java.lang.String insurantGender) {
		this.insurantGender = insurantGender;
	}
	/**
	 * insurantMobile
	 */
	public java.lang.String getInsurantMobile() {
		return insurantMobile;
	}
	/**
	 * insurantMobile
	 */
	public void setInsurantMobile(java.lang.String insurantMobile) {
		this.insurantMobile = insurantMobile;
	}
}

2.rules

2-1.after

2-1-1.UserInfoAfterRuleValid.java

package validator.rules.after;

import validator.dto.UserInfo;
import validator.validator.service.AfterRuleValidService;

public class UserInfoAfterRuleValid implements AfterRuleValidService<UserInfo>{

	@Override
	public void execute(UserInfo t) throws Exception {
		System.out.println("数据校验之后执行成功!");
	}

}

 2-2.before

2-2-1.UserInfoBeforeRuleValid.java

package validator.rules.before;

import validator.dto.UserInfo;
import validator.validator.service.BeforeRuleValidService;

public class UserInfoBeforeRuleValid implements BeforeRuleValidService<UserInfo>{

	@Override
	public void execute(UserInfo t) throws Exception {
		System.out.println("数据校验之前执行成功!");
	}

}

2-3.valid

2-3-1.UserInfoValidServiceImpl.java

package validator.rules.valid;

import validator.dto.UserInfo;
import validator.validator.service.RuleValidService;

public class UserInfoValidServiceImpl implements RuleValidService<UserInfo>{

	@Override
	public String valid(UserInfo t) throws Exception {
		System.out.println("执行数据校验!");
		return "校验不通过!";
	}

}

3.validator

3-1.service

3-1-1.AfterRuleValidService.java

package validator.validator.service;
public interface  AfterRuleValidService<T> {
	public void execute(T t) throws Exception;
}


3-1-2.BeforeRuleValidService.java

package validator.validator.service;
public interface  BeforeRuleValidService<T> {
	public void execute(T t) throws Exception;
}


3-1-3.RuleValidService.java

package validator.validator.service;


public interface RuleValidService<T> {

	public String valid(T t) throws Exception;


}

3-2.RulesValid.java

package validator.validator;


import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

import validator.validator.service.AfterRuleValidService;
import validator.validator.service.BeforeRuleValidService;

/**
 * 校验声明
 * @author Administrator
 *
 */
@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE,ElementType.METHOD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = RuleValidator.class)
@Documented
public @interface RulesValid {

    String message() default "";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
    

	Class<?>[] vaildClass();
	
	Class<? extends BeforeRuleValidService>[] beforeClass() default {};
	Class<? extends AfterRuleValidService>[] afterClass() default {};
    
    
 
}

3-3.RuleValidator.java

package validator.validator;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import org.apache.commons.lang.StringUtils;

import validator.validator.service.AfterRuleValidService;
import validator.validator.service.BeforeRuleValidService;
import validator.validator.service.RuleValidService;
/**
 * 
 * @author jevons
 * 2019年2月28日
 */
@SuppressWarnings({ "unchecked", "unused","rawtypes" })
public class RuleValidator implements ConstraintValidator<RulesValid,Object> {
	
	private String initializeMeg;
	
	private RuleValidService[] ruleValids;
	
	private BeforeRuleValidService[] beforeValidServices;
	
	private AfterRuleValidService[] afterValidService;
	
	@Override
	public void initialize(RulesValid anno) {
		try {	
			ruleValids=new RuleValidService[anno.vaildClass().length];
			for(int i=0;i<anno.vaildClass().length;i++){
				ruleValids[i]=(RuleValidService) anno.vaildClass()[i].newInstance();
			}
			beforeValidServices = new BeforeRuleValidService[anno.beforeClass().length];
			if(anno.beforeClass() != null){
				for(int i=0;i<anno.beforeClass().length;i++){
					beforeValidServices[i]=(BeforeRuleValidService)anno.beforeClass()[i].newInstance();
				}
			}
			afterValidService = new AfterRuleValidService[anno.afterClass().length];
			if(anno.afterClass() != null){
				for(int i=0;i<anno.afterClass().length;i++){
					afterValidService[i]=(AfterRuleValidService)anno.afterClass()[i].newInstance();
				}
			}
		} catch (InstantiationException e) {
			initializeMeg = "系统校验异常:"+e.getMessage();
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			initializeMeg = "系统校验异常:"+e.getMessage();
			e.printStackTrace();
		}
	} 
	@Override
	public boolean isValid(Object target, ConstraintValidatorContext context) {
		String msg =  "";
		try{
			for(BeforeRuleValidService beforeRuleValidService : beforeValidServices){
				if(beforeRuleValidService != null){
					beforeRuleValidService.execute(target);//校验之前
				}
			}
			for(RuleValidService ruleValidService:ruleValids){
				msg = ruleValidService.valid(target);
			}
			for(AfterRuleValidService afterRuleValidService:afterValidService){
				if(afterRuleValidService != null){
					afterRuleValidService.execute(target);//校验之后
				}
				
			}
		}catch(Exception e){
			msg = "系统数据校验异常:"+ e.getMessage();
			e.printStackTrace();
			
		}
		//修改返回信息
		if(!StringUtils.isEmpty( msg)){
			context.disableDefaultConstraintViolation();  
			context.buildConstraintViolationWithTemplate(msg).addConstraintViolation();
			return false;
		}
		return true;
	}
 

}

4.test

4-1.Main.java

package validator.test;

import java.util.Set;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;

import org.hibernate.validator.HibernateValidator;

import validator.dto.UserInfo;
public class Main {
	static Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator();
	 
	public static void main(String[] args) {
		UserInfo insurant = new UserInfo();
		testAnnotation(insurant);
	}
	public static void testAnnotation(UserInfo userInfo){
		Set<ConstraintViolation<UserInfo>> validate = validator.validate(userInfo);
		System.out.println(validate);
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值