1. 程式人生 > >Spring框架 之@Valid註解的使用(嵌套類型的效驗)

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

Springboot 之@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

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

技術分享圖片技術分享圖片

註意:實體類驗證只是針對該實體內第一層對象的屬性進行驗證,如果存在被驗證的實體類為另一個實體類的的成員變量,那麽就需要在該成員變量(需要驗證的實體類)上加 @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頁面接口數據驗證對比

技術分享圖片技術分享圖片

三、@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){
}
}
來解決

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