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

相關文章
相關標籤/搜索