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 后台參數驗證

©著作權歸作者所有:來自51CTO博客作者沉淀人生的原創作品,如需轉載,請注明出處,否則將追究法律責任


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM