java使用validator进行校验

Posted gxyandwmm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java使用validator进行校验相关的知识,希望对你有一定的参考价值。

不管是html页面表单提交的对象数据还是和第三方公司进行接口对接,都需要对接收到的数据进行校验(非空、长度、格式等等)。如果使用if一个个进行校验(字段非常多),这是让人崩溃的过程。幸好jdk或hibernate都提供了对object对象的校验,只需加上相应的注解即可。

1.项目建立

技术图片

 pom.xml


[html] view plain copy
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.fei</groupId>  
  <artifactId>validation-test</artifactId>  
  <version>0.0.1-SNAPSHOT</version>  
    
  <dependencies>  
    
    <dependency>  
        <groupId>javax.el</groupId>  
        <artifactId>javax.el-api</artifactId>  
        <version>2.2.4</version>  
    </dependency>  
      
  <dependency>  
        <groupId>org.hibernate</groupId>  
        <artifactId>hibernate-validator</artifactId>  
        <version>5.1.3.Final</version>  
    </dependency>  
    
  </dependencies>  
    
</project>2.基本校验练习
StudentInfo.java


[java] view plain copy
package com.fei.info;  
  
import javax.validation.constraints.Pattern;  
  
import org.hibernate.validator.constraints.NotBlank;  
  
public class StudentInfo   
  
    @NotBlank(message="用户名不能为空")  
    private String userName;  
      
    @NotBlank(message="年龄不能为空")  
    @Pattern(regexp="^[0-9]1,2$",message="年龄是整数")  
    private String age;  
      
    /** 
     * 如果是空,则不校验,如果不为空,则校验 
     */  
    @Pattern(regexp="^[0-9]4-[0-9]2-[0-9]2$",message="出生日期格式不正确")  
    private String birthday;  
      
    @NotBlank(message="学校不能为空")  
    private String school;  
  
    public String getUserName()   
        return userName;  
      
  
    public void setUserName(String userName)   
        this.userName = userName;  
      
  
    public String getAge()   
        return age;  
      
  
    public void setAge(String age)   
        this.age = age;  
      
  
    public String getBirthday()   
        return birthday;  
      
  
    public void setBirthday(String birthday)   
        this.birthday = birthday;  
      
  
    public String getSchool()   
        return school;  
      
  
    public void setSchool(String school)   
        this.school = school;  
      
  
ValidatorUtil.java

[java] view plain copy
package com.fei.util;  
  
import java.util.HashMap;  
import java.util.Map;  
import java.util.Set;  
  
import javax.validation.ConstraintViolation;  
import javax.validation.Validation;  
import javax.validation.Validator;  
import javax.validation.groups.Default;  
  
public class ValidatorUtil   
    private static Validator validator = Validation.buildDefaultValidatorFactory()  
            .getValidator();  
      
    public static <T> Map<String,StringBuffer> validate(T obj)  
        Map<String,StringBuffer> errorMap = null;  
        Set<ConstraintViolation<T>> set = validator.validate(obj,Default.class);  
        if(set != null && set.size() >0 )  
            errorMap = new HashMap<String,StringBuffer>();  
            String property = null;  
            for(ConstraintViolation<T> cv : set)  
                //这里循环获取错误信息,可以自定义格式  
                property = cv.getPropertyPath().toString();  
                if(errorMap.get(property) != null)  
                    errorMap.get(property).append("," + cv.getMessage());  
                else  
                    StringBuffer sb = new StringBuffer();  
                    sb.append(cv.getMessage());  
                    errorMap.put(property, sb);  
                  
              
          
        return errorMap;  
      
  
     
  
ValidatorTest.java

[java] view plain copy
package com.fei;  
  
import java.util.Map;  
  
import com.fei.info.StudentInfo;  
import com.fei.util.ValidatorUtil;  
  
public class ValidatorTest   
  
    public static void main(String[] args)   
        StudentInfo s = new StudentInfo();  
        long startTime = System.currentTimeMillis();  
        print(ValidatorUtil.validate(s));  
        System.out.println("===============耗时(毫秒)=" + (System.currentTimeMillis() - startTime));  
          
        s.setUserName("小明");  
        s.setAge("a10");  
        s.setBirthday("2016-9-1");  
        startTime = System.currentTimeMillis();  
        print(ValidatorUtil.validate(s));  
        System.out.println("===============耗时(毫秒)=" + (System.currentTimeMillis() - startTime));  
          
          
          
      
      
    private static void print(Map<String,StringBuffer> errorMap)  
        if(errorMap != null)  
            for(Map.Entry<String, StringBuffer> m : errorMap.entrySet())  
                System.out.println(m.getKey() + ":" + m.getValue().toString());  
              
          
      
  

来看看运行结果:

[plain] view plain copy
十二月 12, 2016 4:02:00 下午 org.hibernate.validator.internal.util.Version <clinit>  
INFO: HV000001: Hibernate Validator 5.1.3.Final  
school:学校不能为空  
age:年龄不能为空  
userName:用户名不能为空  
===============耗时(毫秒)=280  
birthday:出生日期格式不正确  
school:学校不能为空  
age:年龄是整数  
===============耗时(毫秒)=3  

 

技术图片

以上是关于java使用validator进行校验的主要内容,如果未能解决你的问题,请参考以下文章

eggjs的参数校验模块egg-validate的使用和进一步定制化升级

Java中的参数校验

Java中的参数校验

Java使用@Valid+BindingResult进行controller参数校验

java使用validator进行校验

SpringBoot @Valid 和 @Validated 的区别及使用方法