zoukankan      html  css  js  c++  java
  • 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  
    

  • 相关阅读:
    IntelliJ IDEA maven库下载依赖包速度慢的问题
    安装 PHP
    秒杀怎么样才可以防止超卖?基于mysql的事务和锁实现
    MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
    架构师之路16年精选50篇
    基于ELK和Python搭建简单的监控告警系统
    MySQL5.7 利用keepalived来实现mysql双主高可用方案的详细过程
    在线数据迁移
    jedisLock—redis分布式锁实现
    Intellij IDEA 最新旗舰版注册激活破解(2018亲测,可用)
  • 原文地址:https://www.cnblogs.com/gxyandwmm/p/11217389.html
Copyright © 2011-2022 走看看