java使用validator進行校驗


 正文前先來一波福利推薦:

福利一:

百萬年薪架構師視頻,該視頻可以學到很多東西,是本人花錢買的VIP課程,學習消化了一年,為了支持一下女朋友公眾號也方便大家學習,共享給大家。

福利二:

畢業答辯以及工作上各種答辯,平時積累了不少精品PPT,現在共享給大家,大大小小加起來有幾千套,總有適合你的一款,很多是網上是下載不到。

獲取方式:

微信關注 精品3分鍾 ,id為 jingpin3mins,關注后回復   百萬年薪架構師 ,精品收藏PPT  獲取雲盤鏈接,謝謝大家支持!

------------------------正文開始---------------------------

不管是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  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM