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;

}

 

posted @ 2020-07-30 15:02  与f  阅读(364)  评论(0编辑  收藏  举报