• 实现hibernate 的validator校验


    Validator校验分为快速校验和全校验。
    快速校验是当遇到第一个参数不符合条件时,立即停止校验程序,将校验不通过的信息返回到前端;
    全校验是将前端传过来的参数全部进行校验,将所有不通过校验的信息一起返回到前端
    实现方式:

    第一步:在pom.xml中添加依赖

    //validate的依赖
    <dependency>  
    	<groupId>org.hibernate</groupId>
    	<artifactId>hibernate-validator</artifactId>
    	<version>6.0.11.Final</version>
    </dependency>
    //java的map转bean的工具类的依赖
      <dependency>  
        		<groupId>commons-beanutils</groupId>  
        		<artifactId>commons-beanutils</artifactId>  
       	 		<version>1.8.3</version>  
    </dependency>  
    

      


    第二步:再java bean上写上校验规则的注解(更多思维校验规则可百度搜索)
    例如:红色部分为检验规则,message为校验不通过时返回前端的信息

    第三步:
    编写validator的工具类
    思路:获取validator对象,将需要校验的bean传入validator对象的validate方法中,返回的数据既是校验不通过的集合。获取validator对象时,有两种方式,failFast(true)时,获得的是快速校验的对象,failFast(false)时,获得是全校验对象。
    Validator validator1=
    Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
    Validator validator2=
    Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator();
    代码参考:

    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    import javax.validation.ConstraintViolation;
    import javax.validation.Validation;
    import javax.validation.Validator;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.hibernate.validator.HibernateValidator;
    
    public class DomainValidatorUtils {
    	
    	//获取validator对象
    	private static Validator validator1=
    			Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
    	private static Validator validator2=
    			Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator();
    	
    	public static <T> Set<ConstraintViolation<T>> validateFast(Map<String, String> map,T domain) throws Exception {
    		BeanUtils.populate(domain, map);
    		System.out.println("domain.toString()"+domain.toString());
    		Set<ConstraintViolation<T>> validateResult= validator1.validate(domain);
    		if(validateResult.size()>0) {
    			System.out.println(validateResult.iterator().next().getMessage()+",校验失败");
    		}
    		
    		return validateResult;
    	}
    	public static <T> Set<ConstraintViolation<T>> validateAll(Map<String, String> map,T domain) throws Exception {
    		BeanUtils.populate(domain, map);
    		System.out.println("domain.toString()"+domain.toString());
    		Set<ConstraintViolation<T>> validateResult= validator2.validate(domain);
    		if(validateResult.size()>0) {
    			Iterator<ConstraintViolation<T>> it=validateResult.iterator();
    				while(it.hasNext()) {
    				System.out.println(it.next().getMessage()+",校验失败");
    				}
    		}
    		
    		return validateResult;
    	}
    
    }
    

      

  • 相关阅读:
    [luogu2059 JLOI2013] 卡牌游戏 (概率dp)
    [luogu1772 ZJOI2006] 物流运输 (最短路 线性dp)
    [luogu 2568] GCD (欧拉函数)
    [poj 2976] Dropping tests (分数规划 二分)
    cf掉分记——Avito Code Challenge 2018
    新博客的第一篇博文~
    [noip2011 luogu1312] Mayan游戏(模拟)
    bzoj2618 [Cqoi2006]凸多边形
    LLppdd never give up!
    我的scoi2018
  • 原文地址:https://www.cnblogs.com/chcha1/p/10710717.html
Copyright © 2020-2023  润新知