@Valid
@Valid注解用於校驗,所屬的包: javax.validation.Valid.
你可以定義實體,在實體的屬性上添加校驗規則,在API接收數據時添加@Valid注解,這時你的實體將會開啟一個校驗的功能。
## 空檢查
@NotEmpty:用在集合類上面;不能為null,而且長度必須大於0
@NotBlank: 用在String上面;只能作用在String上,不能為null,而且調用trim()后,長度必須大於0
@NotNull:用在基本類型上;不能為null,但可以為empty。
## 長度檢查
@Size(min=,max=):驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內
不要錯用了異常類型,比如在int上不可用@size
@Length(min=, max=) : 只適用於String 類型
## Booelan檢查
@AssertTrue: 驗證 Boolean 對象是否為 true
@AssertFalse: 驗證 Boolean 對象是否為 false
## 日期檢查
@Past: 驗證 Date 和 Calendar 對象是否在當前時間之前
@Future: 驗證 Date 和 Calendar 對象是否在當前時間之后
@Pattern: 驗證 String 對象是否符合正則表達式的規則
## 數值檢查
建議使用在Stirng,Integer類型,不建議使用在int類型上,因為表單值為"" 時無法轉換為int,但可以轉換為Stirng為"",Integer為null
@Min: 驗證 Number 和 String 對象是否大等於指定的值
@Max: 驗證 Number 和 String 對象是否小等於指定的值
@DecimalMax: 被標注的值必須不大於約束中指定的最大值. 這個約束的參數是一個通過BigDecimal定義的最大值的字符串表示.小數存在精度
@DecimalMin: 被標注的值必須不小於約束中指定的最小值. 這個約束的參數是一個通過BigDecimal定義的最小值的字符串表示.小數存在精度
@Digits: 驗證 Number 和 String 的構成是否合法
@Digits(integer=,fraction=): 驗證字符串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度。
BindingResult
Spring驗證的錯誤返回
@Valid 和 BindingResult 是一一對應的,如果有多個@Valid,那么每個@Valid后面跟着的BindingResult就是這個@Valid的驗證結果,順序不能亂
1.首先在參數實體類上面加上相關的驗證信息
public class PublicUserForm implements Serializable { private static final long serialVersionUID = 1L; /** * 手機號 */ @NotBlank(message = "{required}") @Pattern(regexp = RegexpConstant.MOBILE_REG, message = "{mobile}") private String telephone; /** * 密碼 */ private String password;
2.controller層
public ResponseResult regist(@Valid PublicUserForm publicUserForm, BindingResult bindingResult) throws Exception { //在這里,我們判斷參數是否通過校驗 if (bindingResult.hasErrors()) { Map<String,String> errorMsg = new HashMap<>(); for (FieldError item:bindingResult.getFieldErrors()) { errorMsg.put(item.getField(),item.getDefaultMessage()); } //自定義的返回,並將錯誤信息返回 return new ResponseResult(false,200, JSON.toJSONString(errorMsg),errorMsg); } PublicUser publicUser = publicUserService.regist(publicUserForm); return new ResponseResult(true,200,"訪問成功!",null); }