Spring框架 之@Valid註解的使用(嵌套類型的效驗)

@Valid註解可以實現數據的驗證,你可以定義實體,在實體的屬性上添加校驗規則,而在API接收數據時添加@valid關鍵字,這時你的實體將會開啓一個校驗的功能。

@Valid 註解類型的使用:

@Null
限制只能爲null

@NotNull
限制必須不爲null

@AssertFalse
限制必須爲false

@AssertTrue
限制必須爲true

@DecimalMax(value)
限制必須爲一個不大於指定值的數字

@DecimalMin(value)
限制必須爲一個不小於指定值的數字

@Digits(integer,fraction)
限制必須爲一個小數,且整數部分的位數不能超過integer,小數部分的位數不能超過fraction

@Future
限制必須是一個將來的日期

@Max(value)
限制必須爲一個不大於指定值的數字

@Min(value)
限制必須爲一個不小於指定值的數字

@Past
限制必須是一個過去的日期

@Pattern(value)
限制必須符合指定的正則表達式

@Size(max,min)
限制字符長度必須在min到max之間

@Past
驗證註解的元素值(日期類型)比當前時間早

@NotEmpty
驗證註解的元素值不爲null且不爲空(字符串長度不爲0、集合大小不爲0)

@NotBlank
驗證註解的元素值不爲空(不爲null、去除首位空格後長度爲0),不同於@NotEmpty,@NotBlank只應用於字符串且在比較時會去除字符串的空格

@Email
驗證註解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式

注意,不要錯用了異常類型,比如在int上不可用@size

一、普通實體字段驗證及嵌套實體字段驗證區別

QQ截圖20180528191115.pngQQ截圖20180528193456.png

注意:實體類驗證只是針對該實體內第一層對象的屬性進行驗證,如果存在被驗證的實體類爲另一個實體類的的成員變量,那麼就需要在該成員變量(需要驗證的實體類)上加 @valid 註解

二、Restful請求接口(action/controller層/WEB業務層),實體類數據綁定驗證對比

@1.

    import javax.validation.Valid;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.validation.BindingResult;

     //請求參數爲簡單數據組合對象,單層實體字段驗證

    @ApiOperation(value = "從業務平臺獲取卡片內容", notes = "卡片內容獲取")
    @RequestMapping(value = "/cardInfoDetailtest", method = RequestMethod.POST)
    public Object getCardInfoDetailtemp(@Valid CardInfoDTO info,BindingResult bindingResult){
        OutputObjectCSF obj = new OutputObjectCSF();
          if (bindingResult.hasErrors()) {
            obj.setRtnCode(ReturnInfoEnums.PROCESS_PARAMETER_ERROR.getCode());
            obj.setRtnMsg(bindingResult.getAllErrors().get(0).getDefaultMessage());
            return obj;
        }
        return obj;
    }



     //請求參數爲複雜數據組合對象,嵌套實體字段驗證

    @ApiOperation(value = "從業務平臺獲取卡片內容", notes = "卡片內容獲取")
    @RequestMapping(value = "/cardInfoDetailtest", method = RequestMethod.POST)
    public Object getCardInfoDetailtemp(@Valid CardInfoDetail info,BindingResult bindingResult){
        OutputObjectCSF obj = new OutputObjectCSF();
          if (bindingResult.hasErrors()) {
            obj.setRtnCode(ReturnInfoEnums.PROCESS_PARAMETER_ERROR.getCode());
            obj.setRtnMsg(bindingResult.getAllErrors().get(0).getDefaultMessage());
            return obj;
        }
        return obj;
    }

@2.swagger-ui.html頁面接口數據驗證對比

QQ截圖20180528190035.pngQQ截圖20180528185356.png

三、@pathvariable的校驗

spring-boot可能目前並不支持對參數的驗證:
public Result<?> xoById( @NotNull @NotBlank @Size(min=10,max=32)@PathVariable(value="accountId") String id) {}
但目前還無法拋出異常, 可能在spring的下一個版本中解決,或者不用@Pathvariable,而在service中
Class XoService{
    public xoMethon( @NotNull String id){
    }
 }
來解決


參考文獻:java validation 後臺參數驗證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章