• Spring方法级别的验证


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

      @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):
      

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

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

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

      @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会报错。

  • 相关阅读:
    机器任务——最小点覆盖
    树的统计
    农夫约翰
    关押罪犯
    题单
    加分二叉树(递归,区间DP)
    [动态规划] 斜率优化DP
    [树形DP] 换根DP
    [期望DP][SCOI2008] 奖励关
    [数位DP][AHOI2009] Luogu P4127 同类分布
  • 原文地址:https://www.cnblogs.com/songxh-scse/p/7146472.html
Copyright © 2020-2023  润新知