正文前先來一波福利推薦:
福利一:
百萬年薪架構師視頻,該視頻可以學到很多東西,是本人花錢買的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