@RequestBody和@ResponseBody原理解析

最近寫了一些博客,發現對自己和大家還是有很大的幫助的。

今天就來看一下@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

以上就是我的學習總結,可能有些沒想到,不過,對於大家理解,是沒有什麼問題得。有什麼問題,歡迎大家留言探討!

如果想更深入的學習,可以看看一下連接,我覺得寫的不錯

https://mp.weixin.qq.com/s?__biz=MzI4NjI2OTYwNg==&mid=2247485125&idx=1&sn=38829b3170262564e155385fe7c2c86d&chksm=ebdecf0cdca9461a994ec2bfe0ec2fa27d7e25f4df1cfe2c7833a0e74442280a0787eca504b8&mpshare=1&scene=22&srcid=&sharer_sharetime=1585702082458&sharer_shareid=e7e7510f81f2b91f3b1263d0a3ba80c1#rd

 

 

 

 

 

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