以下是一個簡單的 REST API 實作的簡單範例

1.png

在 StudentController 當中建立一個 Post 的 REST API 介面

透過這個Post Request 來新增一個學生的資料,這邊是以簡單示範,故沒有實作資料做存取的部分,收到 request 後就回一個字串的訊息以表達新增資料

其中@RequestBody則是我們帶進來的請求參數,其Student物件如下所示

2.png

學生的資料包含學號和姓名

 

如果要檢查前端/client呼叫這個API的時候所傳過來的參數值的話

有兩種辦法,第一種就是直接寫 java 當中的 if 判斷式進行驗證,如下所示

3.png

如果新增一個學生資訊,學號為必填欄位,則可以透過上面的方法來檢查client傳過來的參數是否為空

我們可以透過 if 判斷式來一個一個檢查所有傳過來的參數,但是當參數的數量非常多的時候

那麼程式碼則會變得非常冗長,

 

SpringBoot為了解決這樣的問題,提供了一套驗證請求參數的註解讓我們可以使用

自從SpringBoot 2.3 版本之後開始,如果要使用驗證請求參數的註解需要做額外的設定

在maven project中,需要再pom.xml的dependency加入validation

可至Maven Repository複製dependency把他加入到pom.xml中

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation

4.png

 

@NotNull

首先在 Student 的 id 變數上面加上@NotNull的註解

這樣寫代表著這個 id 的值不可以為 null

5.png

接著在Rest Controller的Request Body後面必須加上@Valid的註解

6.png

這樣SpringBoot就會自動幫我們去檢查送進來的參數當中 id  是否為 null

正常的狀況去打API,結果會得到200,如下所示

7.png

8.png

 

那如果我們將 id 這個參數移除,則會得到400的結果

9.png

10.png

400代表client請求參數有問題的意思

從IDE的Console可以看到以下錯誤訊息:

Field error in object 'student' on field 'id': rejected value [null];

 

以下是比較常使用到的一些參數驗證註解,使用方式與上述一樣

11.png

下面這些是一些比較少用的註解,可以等到需要使用的時候再稍微查一下用法

12.png

需要特別再次強調的是,在使用這些註解時,除了data object在對應的參數上加上要使用的註解以外

另外在@RequestBody的物件變數前,一定要加上@Valid的註解,否則寫在data object上的註解都會沒有用

 

此外,SpringBoot所提供的驗證請求參數註解,也可以加上其他參數上的

如下圖所示,

13.png

這個就是去限制url路徑裡面的 studentId 的值必須要>=100才可以

但是如果要讓在PathVariable的Min註解生效的話

我們必須要在這個Controller Class上加上@Validated,如下圖所示

14.png

 

這邊重點整理一下:

1. 使用 @RequestBody 時,要在該參數上加上 @Valid 註解,才能讓這個 calss 裡的驗證請求參數的註解生效

2. 使用 @RequestParam, @RequestHeader, @PathVaribale 需要在這個Controller 上加上 @Validated 註解,才能夠讓驗證請求參數的註解生效

 

此篇文章是參考hahow的「Java 工程師必備!Spring Boot 零基礎入門」學習筆記

https://hahow.in/courses/5fe22e7fe810e10fc483dd78/main?mts_s=ap&mts_m=ha&oasId=61e56b6ca818020006c01394

arrow
arrow

    Mark Zhang 發表在 痞客邦 留言(0) 人氣()