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;
    
    }
  • 相关阅读:
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
  • 原文地址:https://www.cnblogs.com/fps2tao/p/13403847.html
Copyright © 2011-2022 走看看