zoukankan      html  css  js  c++  java
  • java数据校验Hibernate Validator

    数据校验:
    JSR303 --> Hibernate Validator


    使用Hibernate Validator 步骤:


    1.导入jar包

    Hibernate-validator-4.3.0.jar --注意版本问题
    Hibernate-api-1.0.0.jar
    Hibernate-Validator-annotation-pro....
    classmate.jar
    jboss-logging-3.1.0.jar
      <dependency>  
            <groupId>org.hibernate</groupId>  
            <artifactId>hibernate-validator</artifactId>  
            <version>5.1.3.Final</version>  
      </dependency>

    2.配置


    <mvc:annotation-driven></mvc:annotation-driven>
    此时mvc:annotation-driven作用:要实现Hibernate Validator/JSR303(或其他各种校验),必须实现ValidatorFactory接口,

    LocalValidatorFactoryBean是SpringMVC已经写好的类(集成与ValidatorFactory接口),
    上面的配置会自动把这个Bean配置到容器中.

    3.注解使用


    (1)在实体Bean字段中 加规则(正则表达式等).
    (2)在Controller中,给校验的字段对象加@Valid
    (3)如何获取校验结果 BindingResult result (接收类型BindingResult必须在校验字段的后面,再是如果用了关联类,需要关联验证,在类变量上也需加上@Valid)

       @RequestMapping("/listparam")
        public String  listparam (@Valid CompanyAndTypeListPojo ctlps,BindingResult result) 
        {
     
            System.out.println(result.getErrorCount());
            if(result.getErrorCount()>0) {
                for(FieldError error : result.getFieldErrors()) {
                    System.out.println(JSON.toJSONString(error));
                    
                }
            }
            //
            
            if(result.hasErrors()){
                for (ObjectError error : result.getAllErrors()) {
                    System.out.println(error.getDefaultMessage());
                }
            }
    
            this.model.addAttribute("action_type", "集合类型(map,list)搜索结果");
               String req_data = JSON.toJSONString(ctlps);
                this.model.addAttribute("req_data", req_data);
            return "home/helloworld/test1";    
         
        }

    例子1:  (非javaWeb例子)

    1)先建立 CompanyPojo类:

    package com.cc8w.entity;
    
    
    import javax.validation.constraints.NotBlank;
    import javax.validation.constraints.Size;
    
    public class CompanyPojo {
        private int id=0;
        @NotBlank(message="公司名称不能为空") 
        @Size(min=8, max=30,message = "请检查公司名称的长度是否有问题")
        private String c_name="";
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getC_name() {
            return c_name;
        }
        public void setC_name(String c_name) {
            this.c_name = c_name;
        }
        
    }

    2).验证

            //实例化要测试的Bean
            CompanyPojo cp = new CompanyPojo();
            cp.setC_name("1");
            cp.setId(1);
            
            //1.创建工厂
            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
            //2.通过工厂获取校验对象validator
            Validator validator = factory.getValidator();
            //3.校验模型对象
            Set<ConstraintViolation<CompanyPojo>> constraintViolation = validator.validate(cp);
            //4.通过iterator遍历校验后的结果
            Iterator<ConstraintViolation<CompanyPojo>>iterator = constraintViolation.iterator();
            
            while(iterator.hasNext()) {
                ConstraintViolation<CompanyPojo> cat = iterator.next();
                System.out.println(cat.getPropertyPath());//出错的字段名
                System.out.println(cat.getMessage());//出错的信息
            }    

    ==================================================================

    补充,引用 类变量,也生效校验规则

    @Data
    public class CompanyAndTypePojo {
        @Valid  //加上校验CompanyPojo类的验证规则生效,反之则不生效
        private CompanyPojo company;
        private CompanyTypePojo company_type;
    
    }
  • 相关阅读:
    Javascript基础
    Dao习题
    构建良好的Windows程序
    初始Windows程序
    ADO.NET访问数据库
    连接查询和分组查询
    [leetcode]126. Word Ladder II单词接龙II
    [leetcode]155. Min Stack最小栈
    [leetcode]796. Rotate String旋转字串
    [leetcode]460. LFU Cache最低频率缓存
  • 原文地址:https://www.cnblogs.com/fps2tao/p/13403847.html
Copyright © 2011-2022 走看看