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

    数据校验

    两种方式:一种是spring自带的 Validation校验框架,另一种是利用JSR 实现校验功能。

    Spring的 Validation  校验框架

    在 org.springframework.validation 包中重要的接口如下:

    1、Validtor   

    public interface Validator {
    
        /**
         * 该校验能够对clazz类型的对象进行校验*/
        boolean supports(Class<?> clazz);
    
        /**
         * 对目标类target进行校验,并将校验错误记录在errors当中*/
        void validate(Object target, Errors errors);
    
    }

    2、Errors

    package org.springframework.validation;
    
    import java.util.List;
    
    import org.springframework.beans.PropertyAccessor;
    
    /**
     * spring 用来存放错误信息的接口
     * 
     * spring MVC 框架在将请求数据绑定到入参对象后,就会调用校验框架实施校验,
     * 而校验结果保存在处理方法的入参对象之后的参数对象当中。
     * 这个保存校验结果的参数对象必须是  Errors 或BingingResult 类型
     * 一个Errors 对象中包含了一系列的 FileError 和 ObjectError 对象。
     * FieldError 表示与被校验的对象中的某个属性相关的一个错误。
     * BindingResult 扩展了Errors接口,同时获取数据绑定结果对象的信息。*/
    public interface Errors {
    
        String NESTED_PATH_SEPARATOR = PropertyAccessor.NESTED_PROPERTY_SEPARATOR;
    
        String getObjectName();
    
        void setNestedPath(String nestedPath);
    
        String getNestedPath();
    
        void pushNestedPath(String subPath);
    
        void popNestedPath() throws IllegalStateException;
    
        void reject(String errorCode);
    
        void reject(String errorCode, String defaultMessage);
    
        void reject(String errorCode, Object[] errorArgs, String defaultMessage);
    
        void rejectValue(String field, String errorCode);
    
        void rejectValue(String field, String errorCode, String defaultMessage);
    
        void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage);
    
        void addAllErrors(Errors errors);
    
        boolean hasErrors();
    
        int getErrorCount();
    
        List<ObjectError> getAllErrors();
    
        boolean hasGlobalErrors();
    
        int getGlobalErrorCount();
    
        List<ObjectError> getGlobalErrors();
    
        ObjectError getGlobalError();
    
        boolean hasFieldErrors();
    
        int getFieldErrorCount();
    
        List<FieldError> getFieldErrors();
    
        FieldError getFieldError();
    
        boolean hasFieldErrors(String field);
    
        int getFieldErrorCount(String field);
    
        List<FieldError> getFieldErrors(String field);
    
        FieldError getFieldError(String field);
    
        Object getFieldValue(String field);
    
        Class<?> getFieldType(String field);
    
    }

    3、ValidationUtils  spring提供的一个关于校验的工具类。它提供了多个给Errors 对象保存错误的方法。

    View Code

    4、LocalValidatorFactoryBean 该类  extends SpringValidatorAdapter   和  implements ValidatorFactory, ApplicationContextAware, InitializingBean, DisposableBean。只要在spring容器中定义一个 LocalValidatorFactoryBean ,即可将其注入到需要数据校验的bean 中。

    View Code

    bean的定义

    <bean id="validator" class="org.springframework.validation.beanvalidation.localValidatorFactoryBean"/>

    使用:实现接口,并用 @Repository("beanName") 注册一个bean,

      @Autowired  、@Qualifier("beanName")  注入bean使用

     JSR 校验

    hibernate Validator 

     <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-valiadtor</artifactId>
      <version>5.3.5</version>
    </dependency>

    标注在成员变量上的注解:

    @NUll    验证对象是否为空

    @NoNull    验证对象是否不为null,但无法检查长度为 0 的字符串

    @AssertTrue   验证对象是否为true

    @AssertFalse   验证对象是否为 false

    @Max(value)  验证number和string对象是否小于等于指定的值

    @Min(value)  验证number和string对象是否大于等于指定的值

    @DecimalMax(value)  被标注的值必须不大于约束中指定的最大值,这个约束的参数是一个通过BigDecimal 定义的最大值的字符串表示,小数存在精度

    @DecimalMin(value)    被标注的值必须不小于约束中指定的最小值。这个约束的参数是一个通过BigDecimal 定义的最小值的字符串表示,小数存在精度

    @Digits(integer,fraction)     验证字符串是否符合指定格式的数字,integer 指定整数精度,fraction指定小数精度

    @Size(min,max)  验证对象(Array、Collection、Map、String)长度是否在给定的范围内

    @Past    验证Date 和 Calendar 对象是否在当前时间之前

    @Future  验证Date和Calendar 对象是否在当前时间之后

    也可以用正则表示式验证:

    @Pattern(regexp="",message = "请输入正确的。。。")

    扩展:

    @NotBlank     检查约束字符串是不是Null,被Trim 的长度是否大于0,只对字符串,且会去掉前后空格

    @URL  验证是否合法的url

    @Email   验证是否是合法的邮件地址

    @CreditCardNUmber   验证是否是合法的信用卡号码

    @Length(min,max)  验证字符串的长度必须在指定的范围内

    @NotEmpty  检查元素是否为 null 或者 Empty 。用于Array   Collection  map   String 

    @Range(min,max,message)    验证属性值必须在合适的范围内

    使用:

    controller 层接收数据时,使用 @Valid 注解,BindingResult result 中会有错误的信息,

    result.hasErrors()  判断是否也有错误的信息。

    result.getAllErrors() 获取所有的错误信息。

  • 相关阅读:
    Nginx + uWSGI 配置django
    django视图缓存的实现
    scrapy 资料
    scrapy 安装
    程序题做题一般步骤
    检查代码的一般步骤
    Mathematical-Analysis-I-4
    Mathematical-Analysis-I-3
    Mathematical-Analysis-I-1
    Mathematical-Analysis-I-2
  • 原文地址:https://www.cnblogs.com/yrjns/p/11002254.html
Copyright © 2011-2022 走看看