上一篇文章介紹了springmvc的get請求參數可以是一個自定的對象。那么如何限制這個對象里的參數是否必傳呢?
方法一:在代碼邏輯里取出對象里的這個值,手動進行判斷
方法二:使用@Valid注解,在接口請求的時候讓Spring自己進行判斷
比較
如果用上面兩個方法進行非空判斷,當參數傳的是空的時候,
方法一的返回結果的狀態是 200,方法二的返回結果狀態是 400;
方法一需要自定義返回結果並且可以直接在頁面中進行展示,方法二的返回結果需要從Response Body中獲取。
方法一復雜,方法二簡單。
所以這兩種方法的適用場景是不同的,如果要在頁面輸出,應該使用方法一,如果只是接口之間調用,那么使用方法二就可以了
如何使用@Valid注解
比如請求:
public String login(@Valid User user) {...}
User.java 如下:
1 import org.hibernate.validator.constraints.Length; 2 import javax.validation.constraints.NotBlank; 3 4 /** 5 * @author jiashubing 6 * @since 2019/1/9 7 */ 8 public class User { 9 @NotBlank( 10 message = "姓名不能為空" 11 ) 12 @Length( 13 message = "姓名最長為20個字符" 14 , min = 1 15 , max = 20 16 ) 17 private String name; 18 19 @NotBlank( 20 message = "密碼不能為空" 21 ) 22 @Length( 23 message = "密碼最少為8個字符,最長為30個字符" 24 , min = 8 25 , max = 30 26 ) 27 private String password; 28 29 public String getName() { 30 return name; 31 } 32 33 public void setName(String name) { 34 this.name = name; 35 } 36 37 public String getPassword() { 38 return password; 39 } 40 41 public void setPassword(String password) { 42 this.password = password; 43 } 44 45 }
以下轉自:http://blog.51cto.com/825272560/2121519
@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
原創文章,歡迎轉載,轉載請注明出處!