Spring方法级别的验证

设置验证点及验证方式
(1)Spring方法级别的验证有多种验证方式,比较经常使用的有
  @NotBlank:主要是对字符串的验证,不为null且去除空白符以后长度大于0
  @NotNull:主要是对对象的验证,不为null,此处特别注意,当对int等类型进行验证时,须要使用这种方式,可是要使用int的封装类型Integer
  @NotEmpty:主要是对集合类对象的验证,集合中元素的个数大于0
(2)Spring方法级别的验证能够验证的点示范用例以下(忽略import)
  java

  @Validated
  public class Test() {
    @NotBlank(message = "用户名不能为空")
    private String usr;

    private int age;

    public void grow(
      @NotNull(message = "增加的年龄不能为空") Integer ageAdd) {
      age += ageAdd;
    }

    public @NotNull Integer howOld() {
      return age;
    }
  }

  能够对属性、方法入参和返回值等进行验证。
开启验证处理
  当对验证点进行验证以后,为了获得验证的结果,须要开启对验证结果的处理。在Spring3.1以后,只须要引入一个Bean便可,MethodValidationPostProcessor。根据spring的依赖注入方
式,能够采用xml配置,java配置的方式在spring自动注入时将MethodValidationPostProcessor注入到spring容器中,例如以下的java配置(忽略import):
  spring

  @Configuration
  public class beanConfig() {

    @Bean
    public MethodValidationPostProcessor getBean() {
      return new MethodValidationPostProcessor();
    }
  }

  关于MethodValidationPostProcessor类的描述可自行阅读源码,在阅读源码时,咱们能够看到MethodValidationPostProcessor类实现了InitializingBean接口,实现了InitializingBean
的afterPropertiesSet()方法,这是spring用于初始化的一个方法,在initial-method方法以前调用,值得深刻研究。
回到开启验证处理,不只须要引入MethodvalidationPostProcessor这个类,还须要在适当的地方添加@Validated注解,告诉MethodValidationPostProcessor这个类,此处须要验证结果处理。app

@RequestParam与验证注解
  在controller中可能会同时出现@RequestParam和验证的注解(@NotBlank、@NotNull等),以下例:
  ui

  @RequestMapping("/index")
  public String list(
    @RequestParam(required = false, defaultValue = "") @NotBlank(message = "用户名不能为空") String usr)
    /*
      code
    */
  }


  解析:(1)若是url请求中有传参数,只须要验证@NotBlank;
     (2)若是url请求中没有传参数,@RequestParam中只要有defaultValue,无论required是true仍是false,参数的值都赋为defaultValue的值,再验证@NotBlank;
     例:@ReuqstParam(required=true, defaulfValue"10011") @NotBlank(message="用户名不能为空") String usr
       此时没有传参,usr为10011,虽然required值为true,可是不会报错。
     (3)若是@RequestParam中required属性为true,没有defaultValue且url请求中没有传参,那么会返回@RequestParam的错误信息,不会返回@NotBlank的错误信息。
     例:@RequestParam(required=true) @NotBlank(message = "用户名不能为空") String usr
       此时没有传参,只会返回没有参数的错误。
  注意:没有传参与没有参数值是有区别的,required限制的是url中有这个参数,参数的值是多少并不关心,若是没有值,会被赋值为null;@NotBlank限制的是参数的值不能为空(null或去除空白符长度为0)。没有传参,required=true时会报错,没有参数值,@NotBlank会报错。url

相关文章
相关标签/搜索