Valid 註解 在專案中的使用經驗

2021-10-05 22:14:40 字數 3595 閱讀 7709

註解 @valid 的主要作用是用於資料效驗,可以在定義的實體中的屬性上,新增不同的註解來完成不同的校驗規則,而在介面類中的接收資料引數中新增 @valid 註解,這時實體將會開啟乙個校驗的功能。

前段時間專案開發的時候,前端傳遞的引數過多且都要校驗,於是出現了

public string adduserinfo(@requestbody user user) else if(user.get***() == null || "".equals(user.get***())) else if(user.getusername() == null || "".equals(user.getusername())) else

......

}這樣的**如果按正常**邏輯來說,是沒有什麼問題的,不過看起來極其臃腫,簡直糟糕透了,可讀性極差。

相關註解

空檢查

@null 驗證物件是否為null

@notnull 驗證物件是否不為null, 無法查檢長度為0的字串

@notblank 檢查約束字串是不是null 還有去掉前後空格的長度是否大於0, 只對 字串 ,且會去掉前後空格

@notempty 檢查約束元素是否為 null 或者是 empty ;不去除 string 前後空格

booelan檢查

@asserttrue 驗證 boolean 物件是否為 true

@assertfalse 驗證 boolean 物件是否為 false

長度檢查

@size(min=, max=) 驗證物件長度是否在給定的範圍之內;可校驗 array,collection,map,string

@length(min=, max=) 驗證物件長度是否在給定的範圍之內;只能校驗 string

日期檢查

@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 的構成是否合法 ,integer=, fraction 驗證字串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度

@valid 遞迴的對關聯物件進行校驗, 一般用於內部類

@email 驗證是否是郵件位址,如果為null,不進行驗證,算通過驗證。

簡單演示
@data

這樣看起來清晰好多,少了很多 if **,但是新的問題隨之而來。例如:使用者註冊時,user 類的 userid不需要做校驗,因為 user 的 userid 肯定是由系統生成而不是讓使用者自己填寫的。但是在更新使用者資訊時,又需要傳入 userid 來作為where語句的條件去更新。

分組校驗

public class uservalidationgroup 

/*** 新增使用者的時候校驗

*/public inte***ce updateuser {}

}@data

@allargsconstructor

@noargsconstructor

@builder

public class user

public string adduser(@valid user user, bindingresult bindingresult)

return "fail";

}return "success";

}/**

* 注意看校驗註解,要與實體類需要校驗的屬性一致

*/public string updateuser(@validated(uservalidationgroup.updateuser.class) user user, bindingresult bindingresult)

return "fail";

}return "success";

}

這樣就可以分開校驗了,解決了分開校驗,但是又遇到新的麻煩;更新使用者時候,userid 校驗了,但是username 和 password 校驗失效了;如果將分組校驗加到 username 和password 上,那麼更新使用者沒問題,新增使用者就不會做任何校驗了,問題還要解決啊。

提取分組校驗公共部分:

public class uservalidationgroup 

/*** 新增使用者的時候校驗

*/public inte***ce adduser extends commonvalid{}

/*** 新增使用者的時候校驗

*/public inte***ce updateuser extends commonvalid {}

}public class validcontroller

return "fail";

}return "success";

}/**

* 注意看校驗註解,要與實體類需要校驗的屬性一致

*/public string updateuser(@validated(uservalidationgroup.updateuser.class) user user, bindingresult bindingresult)

return "fail";

}return "success";}}

@data

@allargsconstructor

@noargsconstructor

@builder

public class user

隨筆記錄

Valid註解的使用

在實體類上打上註解 data public class user2.在controller上加上註解 valid,進行引數校驗 public string testuser requestbody valid user user,bindingresult bindingresult return ...

Valid 註解的使用

限制 說明 null 限制只能為null notnull 限制必須不為null assertfalse 限制必須為false asserttrue 限制必須為true decimalmax value 限制必須為乙個不大於指定值的數字 decimalmin value 限制必須為乙個不小於指定值的數...

redis在專案中的使用

1.各種計數,商品維度計數和使用者維度計數 2 6 2.儲存社交關係 譬如將使用者的好友 粉絲 關注,可以存在乙個sorted set中,score可以是timestamp,這樣求兩個人的共同好友的操作,可能就只需要用求交集命令即可。redis zadd user 100000 follow 613...