讓你的代碼更加簡練,springboot使用JSR303校驗

痛點



相信不少人寫過這樣都代碼,對方法入參進行了各種校驗。上面還是比較少的校驗。如果遇到什麼郵箱、手機號更復雜,對格式也需要進行校驗。可能洋洋灑灑幾百行代碼就過去了。這種代碼其實跟業務流程沒有太多關係,但是又不能不做。那麼有沒有一種方法可以避免呢。當然有!就是JSR-303(JSR是指向JCP(Java Community Process)提出新增一個標準化技術規範的正式請求,是Java界的一個重要標準)校驗規範。


JSR-303


JSR-303 是 JAVA EE 6 中的一項子規範,叫做 Bean Validation,官方的參考實現是Hibernate Validator。需要注意的是此實現與 Hibernate ORM 沒有任何關係。JSR 303 用於對 Java Bean 中的字段的值進行合法性驗證。Spring MVC 3.x 開始支持 JSR-303,可以在控制器中對提交的數據進行JSR-303驗證。 把驗證交給框架,讓我們更專注於業務 。常用的規則如下:




springboot中JSR的使用


默認springboot集成了 hibernate-validator,而且默認是生效的,可以直接使用。默認不支持基礎類型的驗證,必須配置攔截器MethodValidationPostProcessor,在Controller類上加 @Validated註解可以實現對方法參數的校驗。而且默認只驗證 controller 方法上的 validator 註解,而不會驗證 controller 層以外的。所以,如果要在其他層使用 validator 驗證的話,需要單獨配置攔截器.


如果驗證對象是java Bean,就更好操作了,我們下面走一個完整的springboot例子,

先構建一個需要校驗的java Bean,通過JSR-303的校驗註解進行對應的操作,如下



在springmvc接口中 像下面一樣增加一個@Valid 註解就行了


這裏可能你產生了疑問,如果校驗失敗我們怎麼辦?不知道你是否瞭解springboot 統一異常處理

(通過@ControllerAdvice 聲明一個全局異常類)我們可以通過統一攔截處理校驗異常把上面註解中的的message信息返回給前端。值得注意的是,如果你前臺傳入的參數不在body中,校驗失敗拋出BindException異常,如果接口方法的參數有@RequstBody 註解,即參數放在body中傳輸,會拋出MethodArgumentNotValidException 異常,分別加以處理即可。樣例如下




如果上面的不滿足需要,我們還可以對hibernate-validator 進行擴展,甚至可以實現fail-fast 機制(當有錯誤時剩下的都不再進行校驗立即失敗)。這個留給你自己探索發現。上面的可以應付大多數場景,而且如果配合lombok 神器 你的代碼會更加清晰簡練。


我是碼農小胖哥,關注我的頭條或者公衆號,天天有乾貨。有問題可以留言或者私信,覺得寫的不錯可以點個贊,轉發一下。


本文分享自微信公衆號 - 碼農小胖哥(Felordcn)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章