@RequestBody和@RequestParam區別


@RequestParam

注解@RequestParam接收的參數是來自HTTP請求體或請求url的QueryString中。

RequestParam可以接受簡單類型的屬性,也可以接受對象類型。

@RequestParam有三個配置參數:

  • required表示是否必須,默認為 true,必須。
  • defaultValue可設置請求參數的默認值。
  • value為接收url的參數名(相當於key值)。

@RequestParam用來處理 Content-Type為 application/x-www-form-urlencoded編碼的內容,Content-Type默認為該屬性,也可以接收​​​​​​​application/json。@RequestParam也可用於其它類型的請求,例如:POST、DELETE等請求

所以在postman中,要選擇body的類型為 x-www-form-urlencoded,這樣在headers中就自動變為了 Content-Typeapplication/x-www-form-urlencoded編碼格式。如下圖所示

 

 

但是這樣有個弊端不支持批量插入數據啊,如果改用 json字符串來傳值的話,類型設置為 application/json,點擊發送的話,會報錯,后台接收不到值,為 null

這時候,注解@RequestBody就派上用場了。

@RequestBody

注解@RequestBody接收的參數是來自requestBody中,即請求體。一般用於處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數據,比如:application/jsonapplication/xml等類型的數據。

application/json類型的數據而言,使用注解@RequestBody可以將body里面所有的json數據傳到后端,后端再進行解析。

GET請求中,因為沒有HttpEntity,所以@RequestBody並不適用。

POST請求中,通過HttpEntity傳遞的參數,必須要在請求頭中聲明數據的類型Content-Type,SpringMVC通過使用

HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的數據,然后綁定到相應的bean上。

向表中批量插入數據

舉個批量插入數據的例子,Controller層的寫法如下圖所示:

 

由於@RequestBody可用來處理 Content-Type為 application/json編碼的內容,所以在postman中,選擇body的類型為row-> JSON(application/json)

這樣在 Headers中也會自動變為 Content-Typeapplication/json編碼格式。body內的數據如下圖所示:

 

批量向表中插入兩條數據,這里的 saveBatchNovel()方法已經封裝了 JPA的 saveAll()方法。body里面的 json語句的 key值要與后端實體類的屬性一一對應。

注意:前端使用$.ajax的話,一定要指定 contentType: "application/json;charset=utf-8;",默認為 application/x-www-form-urlencoded

結論:通過@RequestBody可以解析 Body 中JSON 格式的數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM