成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

開發 后端
對于寫Java的程序員來說,不管是寫單純的接口、還是頁面后臺一把梭,后端參數校驗的功能都是整個代碼不可或缺的一部分,它可以從系統入口過濾掉一些不合法的數據,以確保我們的系統穩定。

對于寫Java的程序員來說,不管是寫單純的接口、還是頁面后臺一把梭,后端參數校驗的功能都是整個代碼不可或缺的一部分,它可以從系統入口過濾掉一些不合法的數據,以確保我們的系統穩定。

還記得我剛入行Java寫后端那會兒,因為剛從Android端轉后端開發,對對端開發還不是很熟悉。有天我們架構師老大給了我一個需求、要寫一個接口給客戶端調用,功能其實挺簡單:就是根據客戶端傳過來的一些參數去數據庫查數據,再返回給客戶端。

我雖然作為一個后端萌新,但畢竟寫代碼的底子還在啊!很快我就完成了,自己測試一下完美通過,立刻提交代碼、并主動叫我們老大Code review,我心里還指著我們老大能夸我一頓、說我寫得真快呢!

沒想到我們老大只看了一眼就把我提交的代碼打回來了,我記得當時我的代碼差不多是這樣寫的:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

我自問寫的代碼沒問題,就找老大問他我的代碼沒問題怎么給我打回來了?只見老大一臉無奈地看著我說:功能是沒問題,就是寫的太丑陋了點。好吧,我承認代碼寫的是長了點、亂了點,可那是因為接口參數太多,不得一個個校驗一下嗎?

說到這里,老大微微一笑說:來,教你一招。只見老大手指上下翻飛,三兩下就我的校驗參數地代碼全刪完了,重構完地代碼瞬間清爽了許多:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

老大得意的對我說:看起來不錯吧?不要你晚上加個班熟悉一下Spring Validation機制吧?寶寶心里苦啊!

下面我們就一起來看看Spring Validation怎么使用吧。

首先添加POM依賴

新建一個Spring Boot項目,并在pom.xml文件添加依賴:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

需要特別注意的一點是:如果我們項目中引入了spring-boot-starter-web依賴,那么它會自動依賴spring-boot-starter-validation,無需我們再手動添加依賴,防止出現一些版本兼容的問題。

添加約束注解

在接收參數的UserReq實體類對應的屬性上加上約束注解:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

注意點:

  • 每個約束注解都有一個message元素,用于校驗失敗時的提示信息
  • 一個屬性可以添加多個約束注解,所有注解是與的關系,必須全部驗證通過
  • 可以使用正則表達式校驗參數

眼尖的同學可能會發現上面代碼中用到的一些約束注解一些是引用自javax.validation.constraints包下,還有一些引用自org.hibernate.validator.constraints包下,這是怎么一回事呢?

說到這里,不得不提一下JSR-303,JSR-303是JAVA EE(現改名為:Jakarta EE)中的一項子規范,叫Bean Validation,它定義了一些實體和方法驗證的約束和接口規范,而Hibernate Validator對Bean Validation規范中所有內置約束注解都提供了實現,并且還添加了一些額外的約束注解。

Bean Validation中內置的約束注解:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

Hibernate Validator中添加的約束注解:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

值得一提的是:在Hibernate Validator中額外添加的一些優秀的約束注解比如@Email@NotEmpty@NotBlank已經被吸收到Bean Validation標準約束注解中,所有我們在代碼中Import時應盡量使用javax.validation.constraints包下的約束注解。

怎么使用呢?

接收參數的實體類我們已經改造好了,但是還不能實現校驗的功能,還需要對Controller進行改造:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

  • 在接收方法的參數前面加上@Validated注解,當然也可以加@Valid注解
  • 想要獲取參數校驗的結果,則需要進行校驗的參數后面緊跟一個BingingResult類型的參數,用來綁定校驗結果

關于第一點,@Validated注解由Spring框架提供,可以說是對JSR-303規范標準注解@Valid的封裝,可以提供額外的例如分組校驗的功能。實際上任何以"Valid"開頭的注解都可以實現同樣的效果(至于原因有機會專門寫一篇講一下,感興趣的可以關注一下)

至于第二點,為什么校驗結果會自動綁定到后面緊跟的BingingResult對象,這里面涉及到Spring DataBinder數據綁定相關的知識(以后會專門講解,感興趣的可以關注一下),現在我們只需要知道這樣寫就行。

請求測試

現在我們使用Postman工具來請求我們的接口:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

然后我們打上斷點來調試一下bindingResult對象:

 

 

可以看到bindingResult對象成功綁定并返回了三個屬性校驗失敗的結果。

分組校驗

我們寫業務時通常會存在一種情況:新增操作時通常不需要校驗參數Id,而在修改或刪除操作時我們又需要校驗參數Id,那么對于同一個參數接收類UserReq,我們要怎么處理呢?

很簡單,首先我們新建一個更新分組,只需要一個普普通通的接口類就行:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

接著我們在UserReq類里新增一個id屬性,同時加上@NotNull分組校驗:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

groups支持傳入一個數組,可以傳入多個分組,對于id屬性來說,在更新和刪除操作時我們都需要校驗該屬性。

最后,在Controller里更新接口方法中添加校驗分組:

程序員寫接口參數校驗,總是太多if else?一招讓你避免體力活

 

我們只需要在注解中加上需要校驗的Update分組就行啦。 

 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2015-02-13 10:52:48

Java程序員

2015-03-23 09:57:48

程序員

2019-06-26 08:45:28

程序員思考腦年終獎

2019-01-23 10:11:43

Python爬蟲IP

2020-04-17 10:32:59

在線軟件文檔工具代碼

2015-03-30 15:51:29

程序員程序員面試

2009-05-21 15:58:12

程序員工作經驗職場

2014-08-15 11:07:09

程序員

2015-12-07 11:44:31

程序員厭倦工作

2015-12-09 09:17:11

情緒厭倦程序員

2015-04-10 19:37:34

程序員

2009-06-10 17:12:28

程序員

2016-04-13 10:20:19

2012-02-22 14:21:18

2022-01-26 00:41:58

程序員學習型工作

2020-07-24 07:44:10

程序員思維逆向

2013-01-22 13:50:11

程序員前端Web

2020-12-07 10:19:01

程序員技術IT

2014-03-13 09:29:30

程序員碼農

2013-07-30 11:24:33

SAP“簡化IT 一招
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩一区二区三区 | 日韩有码一区二区三区 | 欧美一区二区三区免费电影 | 美女毛片 | 日韩欧美第一页 | 午夜免费福利影院 | 岛国视频 | 亚洲网站在线播放 | 天堂资源最新在线 | 麻豆一区二区三区 | 成人精品在线观看 | 91免费小视频 | 精品在线一区二区三区 | 免费精品视频在线观看 | 欧美一区二区在线 | 国内精品一区二区三区 | 精品96久久久久久中文字幕无 | 在线免费激情视频 | 黄色骚片 | 久久精品小短片 | 欧美日产国产成人免费图片 | wwwxxx国产| 国产一级视频在线 | 久久精品久久综合 | 日韩欧美精品在线 | 最近最新中文字幕 | 99在线精品视频 | 福利国产 | 国产精品久久久久久婷婷天堂 | 青青草华人在线视频 | 欧美综合久久久 | 日本不卡在线观看 | 精品国产乱码久久久久久蜜退臀 | 成人在线免费观看 | 久久久久国产视频 | 亚洲精品一二三区 | 亚洲天堂日韩精品 | 久久久久久毛片免费观看 | 天天爽天天操 | 久久久久久久久久久久亚洲 | 久久精品一区 |