文章目錄
handler method 參數綁定常用的註解,我們根據他們處理的Request的不同內容部分分爲四類:(主要講解常用類型)
- 處理requet uri 部分(這裏指uri template中variable,不含queryString部分)的註解: @PathVariable;
- 處理request header部分的註解: @RequestHeader, @CookieValue;
- 處理request body部分的註解:@RequestParam, @RequestBody;
- 處理attribute類型是註解: @SessionAttributes, @ModelAttribute;
本文只討論:@RequestParam和@RequestBody。
1、根據content-type方面區分:
-
application/json:json字符串部分可以用@RequestBody;url中的?後面參數可以用@RequestParam。見下圖
-
form-data、x-www-form-urlencoded:不可以用@RequestBody;可以用@RequestParam。
如果用@RequestBody,值會合併在一起。如下圖所示。
所以這樣還是需要後臺代碼再去解析一次,註解等於無效。
正確的:
2、根據註解方式區分:
- @RequestBody
該註解常用來處理Content-Type爲application/json, application/xml的數據;
(@RequestBody Map map)
(@RequestBody Object object)
application/json時候可用
form-data、x-www-form-urlencoded時候不可用
ps:
- GET請求不能用@RequestBody來接收參數。
- 後臺只能有一個@Request註解
- @RequestParam
使用@RequestParm用於綁定controller上的參數,可以是多個參數,也可以是一個Map集合,GET,POST均可
(@RequestParam Map map)
application/json時候,json字符串部分不可用,url中的?後面添加參數即可用,見圖一
form-data、x-www-form-urlencoded時候可用,但是要將Headers裏的Content-Type刪掉
(@RequestParam String param1,
@RequestParam String param2)
application/json時候,json字符串部分不可用,url中的?後面添加參數即可用。form-data、x-www-form-urlencoded時候可用,且參數可以沒有順序(即前端傳過來的參數或者url中的參數順序不必和後臺接口中的參數順序一致,只要字段名相同就可以),但是要將Headers裏的Content-Type刪掉
(@RequestParam Object object)
不管application/json、form-data、x-www-form-urlencoded都不可用
ps:只支持Content-Type: 爲 application/x-www-form-urlencoded編碼的內容。Http協議中,如果不指定Content-Type,則默認傳遞的參數就是application/x-www-form-urlencoded類型)
註解對比圖
區別 | @RequestParam | @RequestBody |
---|---|---|
content-type | 僅支持x-www-form-urlencoded | json(常用), xml |
請求類型 | 所有 | 除了GET |
註解個數 | 可多個 | 只能有一個 |