目录
2-1-1.UserInfoAfterRuleValid.java
2-2-1.UserInfoBeforeRuleValid.java
2-3-1.UserInfoValidServiceImpl.java
3-1-1.AfterRuleValidService.java
3-1-2.BeforeRuleValidService.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);
}
}