最近寫了一些博客,發現對自己和大家還是有很大的幫助的。
今天就來看一下@RequestBody和@ResponseBody原理解析
一)首先說明xia @requestBody與@requestParam的區別
spring的RequestParam註解接收的參數是來自於requestHeader中,即請求頭。都是用來獲取請求路徑(url )中的動態參數。也就是在url中,格式爲xxx?username=123&password=456。功能與@pathvarible。
RequestBody註解接收的參數則是來自於requestBody中,即請求體中。
默認的情況下從前臺往後臺傳值,我們可以用對象去接受,而不用request對象(當然request也可以,但是比較麻煩,還需要進行類型的轉換),後臺傳值方式如下。
有沒有想過,爲什麼會這樣。前臺提交的數據,可以直接轉換爲對象?什麼格式的能轉化爲對象?
無論是採用get方式提交的,還是通過post這種方式提交的,他的數據格式丟失和Content-Type有關的,常見的Content-Type類型如下
幾種常見的Content-Type
application/x-www-form-urlencoded
application/x-www-form-urlencoded主要用於表單形式的POST請求中,如普通的表單提交,或者js發包,默認都是通過這種方式,可以使用Postman來發一個這種類型請求:
application/json
application/json是POST請求以JSON的格式向服務請求發起請求或者請求返回JSON格式的響應內容,服務端接受到數據後對JSON進行解析拿到所需要的參數,同樣適用Postman模擬一個請求:
multipart/form-data
multipart/form-data是使用POST請求上傳文件,如果上傳照片,文件等,由於很多情況下都會有批量上傳,爲了區分不同的數據,multipart/form-data的類型有boundary參數進行分割,對上傳文件請求抓包,request頭部信息如下:
@RequestBody
當Content-Type爲application/x-www-form-urlencoded或者multipart/form-data時
默認的數格式是: a=123&b=123&c=123
用get提交,和post提交是一樣的,數據格式都是這樣,get和post的區別是,get顯示地址欄中,post提交是不顯示的,相對於get來說,post這種提交方式更加安全
如果說是 a=123&b=123&c=123這種格式的話。,spring會自動的去轉成對象的格式
當Content-Type爲application/json時
此時的數據格式是json格式:{“a”,“b”,“c”,“d”}。
那麼這種格式的話,Spring就無法自動轉化爲對象,那麼如何解決呢?
加上@RequestBody,就會自動將json數據轉化爲對象(實體類)
@ResponseBody
@ResponseBody就是和RequestBody差不多,@ResponseBody是將對轉化爲json格式,由於後臺返回數據,而@RequestBody是前臺json數據轉化爲對象,用於前臺提交數據
@ResponseBody使用注意事項
1.@ResponseBody不能自動實現將對象轉化爲Json格式,需要用JSONObject對象轉換一下。
2.方法返回值應爲:String
@RequestBody使用注意事項
一般前臺請求用ajax
1..設置dataType爲json
2.設置contentType爲:application/json
以上就是我的學習總結,可能有些沒想到,不過,對於大家理解,是沒有什麼問題得。有什麼問題,歡迎大家留言探討!
如果想更深入的學習,可以看看一下連接,我覺得寫的不錯