【SpringBoot—注解】@requestBody 與@requestparam;@requestBody的加與不加的區別


一)首先說明xia @requestBody與@requestParam的區別

  spring的RequestParam注解接收的參數是來自於requestHeader中,即請求頭。都是用來獲取請求路徑(url )中的動態參數。也就是在url中,格式為xxx?username=123&password=456。功能與@pathvarible。

RequestBody注解接收的參數則是來自於requestBody中,即請求體中。

知識點:

(二)Content-Type,內容類型,一般是指網頁中存在的Content-Type,用於定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件,這就是經常看到一些Asp網頁點擊的結果卻是下載到的一個文件或一張圖片的原因。

 

(三)問題,@requestBody到底在什么時候寫與不寫呢。


看現象如下:發現ajaxDate有若干種寫法。

打印ajaxDate如下格式:

 

 雖然打印結果是json對象式,但最后會轉為key1=value1&key2=value2的格式提交到后台 ,不需要加@requestBody。 

(2)serializeble實例化表單

 

 打印結果如下:

 

 表單 格式使用的是默認的ContentType類型application/x-www-form-urlencoded,格式為key1=value1&key2=value2提交到后台 ,不需要加@requestBody。 

(3)contentType轉化之后,需要加@requestBody,controller才能接收到數據。 

 

 ajaxData打印結果如下:

 

 post和get功能相同:

 

 前台將ajaxData轉為json字符,后台必須加@RequestBody注解的屬性才能自定映射到值。

為什么有的需要加@requestBody,有的不需要。加與不加的區別如下:

使用@requestBody.當請求content_type為:application/json類型的請求,數據類型為json時, json格式如下:{"aaa":"111","bbb":"222"}
不使用@requestBody.當請求content_type為:application/x-www-form-urlencoded類型的或multipart/form-data時,數據格式為aaa=111&bbb=222。

JQuery的$.ajax(url,[settings]) 
1.默認的ContentType的值為:application/x-www-form-urlencoded; charset=UTF-8 
此格式為表單提交格式,數據為key1=value1&key2=value2的格式 。圖二serrializeble,只用的是默認contentType類型。
2.雖然ajax的data屬性值格式為:{key1:value1,key2:value2},但最后會轉為key1=value1&key2=value2的格式提交到后台 。

圖二,雖然打印出的結果是不是&格式的,但是會轉化。
3.如果ajax要和springmvc交互,要使用key1=value1&key2=value2的格式,后台springmvc只需要定義對象或者參數就行了,會自動映射。 
4.如果springmvc的參數有@RequestBody注解(接收json**字符串**格式數據),ajax必須將date屬性值轉為json字符串,不能為json對象(js對象,會自動轉為key=value形式)。並且,修改contentType的值為:application/json; charset=UTF-8,這樣加了@RequestBody注解的屬性才能自定映射到值。

5.使用在進行圖片或者文件上傳時使用 multipart/form-data 類型時、 數據會自動進行映射不要添加任何注解。

 

 

 

CSDN博主「jiashanshan521」原文鏈接:https://blog.csdn.net/jiashanshan521/article/details/88244735

 


免責聲明!

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



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