Spring MVC Http method 取得請求參數方法
Spring Boot 常使用取得請求的方式:
- @RequestParam
- @RequestBody
- @RequestHeader
- @PathVariable
@RequestParam
用法:
- GET
- required = true/false (預設 true),如果是 false 就不用代入但可能會因此有 null 報 exception
- defaultValue = xxx,設置預設值,設置後 required 就會被忽略
用途:取得放在 URL 的參數
http:localhost:8080/test1?id=123
1 |
|
發送 request,帶入 id =1, name = Sean,故意不帶入第 3 個參數 nickname,可以看到最後會回傳 null 但也不會出錯誤,但如果把 required = true 就會出現 400 Bad Request 錯誤。
console 上面顯示
@RequestBody
用法:
- POST, PUT
- required = true/false (預設 true)
- 需要先定義對應參數的 java class
- RequestBody 裡面多傳參數也不會報錯,有定義的才會被使用,少傳就會有 null
用途:取得 Request body 裡面的參數(將 Json 轉為自定義 Java Object)
http:localhost:8080/test2
controller
1 |
|
Student class
1 | public class Student { |
發送 request,帶入{ “id” =1, “name” = “Sean” }的 JSON 物件,如果請求內所帶的物件屬性不是 Student 物件設定的,不管多或少其實都不會有問題,但如果希望參數設定可以驗證避免使用者傳錯參數的話,就必須要透過驗證註解像是@Valid
, @NotNull
, @NotBlank
等等的部分才可以做到了,這部分後續文章會有進一步說明。
console 上面顯示
@RequestHeader
用法:
- GET/POST
- 只能加在方法參數上
- name(或用 value): 指定 request header 的 header 名字(比 requestparam 的 name 常用)
- required = true/false 同 @RequestParam
- defaultValue: 預設值 同 @RequestParam
用途:取得放在 requestHeader 的參數,可以用 GET 請求中設定 header; 如果用 POST 一般都會帶入 Content-Type = application/json
1 |
|
發送 request,header 上面帶入指定的 header 名稱,如果是參數定義的就可以抓到
console 上面顯示
@PathVariable
用法:
- 路徑上寫的參數要和 @PathVariable 定義的一樣用途:取得放在 URL 路徑裡面的值
- required = true/false (預設 true),如果是 false 就不用代入但可能會因此有 null 報 exception
http://localhost:8080/test4/123/Sean
1 |
|
發送 request,URL 上針對 {id}, {name} 部分帶入參數,後端就可以取得,注意定義的參數類型如果不匹配也會出現 400 bad request,像是如果你把 id 部分用文字帶入請求。
console 上面顯示
小總結:
針對一些用法上大家可以注意一下
Http method | required | defaultValue | 常用情境 | |
---|---|---|---|---|
@RequestParam | GET |
O (預設 true) | O | 查詢參數或表單數據 |
@RequestBody | POST , PUT |
O (預設 true) | X | 處理 JSON 或 XML 請求 |
@PathVariable | GET , PUT , DELETE |
O (預設 true) | X | URL 路徑中的變數 |
@RequestHeader | GET 、POST |
O (預設 true) | O | 獲取 HTTP 請求 header |
參考資料:
- Java 工程師必備!Spring Boot 零基礎入門 (hahow 課程)