@RequestParam與@RequestBody對比

原文鏈接:https://blog.csdn.net/nihaoa50/article/details/86293715

文章目錄

 

handler method 參數綁定常用的註解,我們根據他們處理的Request的不同內容部分分爲四類:(主要講解常用類型)

  1. 處理requet uri 部分(這裏指uri template中variable,不含queryString部分)的註解: @PathVariable;
  2. 處理request header部分的註解: @RequestHeader, @CookieValue;
  3. 處理request body部分的註解:@RequestParam, @RequestBody;
  4. 處理attribute類型是註解: @SessionAttributes, @ModelAttribute;

本文只討論:@RequestParam和@RequestBody。

1、根據content-type方面區分:

  1. application/json:json字符串部分可以用@RequestBody;url中的?後面參數可以用@RequestParam。見下圖
    在這裏插入圖片描述

  2. 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:

  1. GET請求不能用@RequestBody來接收參數。
  2. 後臺只能有一個@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
註解個數 可多個 只能有一個

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章