以下是一個簡單的 REST API 實作的簡單範例
在 StudentController 當中建立一個 Post 的 REST API 介面
透過這個Post Request 來新增一個學生的資料,這邊是以簡單示範,故沒有實作資料做存取的部分,收到 request 後就回一個字串的訊息以表達新增資料
其中@RequestBody則是我們帶進來的請求參數,其Student物件如下所示
學生的資料包含學號和姓名
如果要檢查前端/client呼叫這個API的時候所傳過來的參數值的話
有兩種辦法,第一種就是直接寫 java 當中的 if 判斷式進行驗證,如下所示
如果新增一個學生資訊,學號為必填欄位,則可以透過上面的方法來檢查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
@NotNull
首先在 Student 的 id 變數上面加上@NotNull的註解
這樣寫代表著這個 id 的值不可以為 null
接著在Rest Controller的Request Body後面必須加上@Valid的註解
這樣SpringBoot就會自動幫我們去檢查送進來的參數當中 id 是否為 null
正常的狀況去打API,結果會得到200,如下所示
那如果我們將 id 這個參數移除,則會得到400的結果
400代表client請求參數有問題的意思
從IDE的Console可以看到以下錯誤訊息:
Field error in object 'student' on field 'id': rejected value [null];
以下是比較常使用到的一些參數驗證註解,使用方式與上述一樣
下面這些是一些比較少用的註解,可以等到需要使用的時候再稍微查一下用法
需要特別再次強調的是,在使用這些註解時,除了data object在對應的參數上加上要使用的註解以外
另外在@RequestBody的物件變數前,一定要加上@Valid的註解,否則寫在data object上的註解都會沒有用
此外,SpringBoot所提供的驗證請求參數註解,也可以加上其他參數上的
如下圖所示,
這個就是去限制url路徑裡面的 studentId 的值必須要>=100才可以
但是如果要讓在PathVariable的Min註解生效的話
我們必須要在這個Controller Class上加上@Validated,如下圖所示
這邊重點整理一下:
1. 使用 @RequestBody 時,要在該參數上加上 @Valid 註解,才能讓這個 calss 裡的驗證請求參數的註解生效
2. 使用 @RequestParam, @RequestHeader, @PathVaribale 需要在這個Controller 上加上 @Validated 註解,才能夠讓驗證請求參數的註解生效
此篇文章是參考hahow的「Java 工程師必備!Spring Boot 零基礎入門」學習筆記