溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何解決POST方法給@RequestBody傳參數(shù)失敗的問題

發(fā)布時間:2022-03-04 14:48:54 來源:億速云 閱讀:630 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“如何解決POST方法給@RequestBody傳參數(shù)失敗的問題”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“如何解決POST方法給@RequestBody傳參數(shù)失敗的問題”這篇文章吧。

POST方法給@RequestBody傳參數(shù)失敗

通過ajax給springMVC傳遞參數(shù)時,通過post方法傳遞json字符串時常用的方式,這時后端應(yīng)該通過@RequestBody注解配合springMVC中配置的消息轉(zhuǎn)換器來進行json字符串的解析。

因為post方法中的json字符串通常是一個前端的json對象轉(zhuǎn)化而成的字符串,所以后端@RequestBody后面可以使用HashMap<String,Object>類型來接收所有參數(shù)。

通過這種方式可以非顯式的傳送大量的參數(shù)到后端,并且和具體參數(shù)無關(guān),便于以后對參數(shù)進行擴展,對于不確定參數(shù)的場合,這種方式解除了與具體參數(shù)的耦合。但是由于簡單的過程實際上經(jīng)歷了許多SpringMVC的操作,所以經(jīng)常會遇到各種奇怪問題。

其中post方法請求體中的json字符串無法成功通過SpringMVC中配置的MessageConverter(一般是MappingJackson2HttpMessageConverter)轉(zhuǎn)換為@RequestBody注解的HashMap對象,是可以見到的問題。

這個時候你可以檢查下ajax請求的content-type請求頭,因為在配置MessageConverter消息轉(zhuǎn)換器的時候,需要配置其所檢查的請求體類型(content-type),默認情況下瀏覽器的ajax會添加content-type:application/x-www-form-urlencoded的請求頭,但是有的瀏覽器或者有些時候會發(fā)送content-type:application/x-www-form-urlencoded;charset:utf-8到后端,導(dǎo)致MappingJackson2HttpMessageConverter漏過對它的檢查,這個時候SpringMVC會使用其他的MessageConverter來解析request body中的內(nèi)容,這樣肯定是會解析失敗的。

如果遇到這種情況,比較好的解決方式,可能是在ajax的post請求中強制注明 contentType:application/json,并將application/json 和application/json;charset=utf-8兩種MediaType(MimeType)添加到MappingJackson2HttpMessageConverter對象的檢查列表中。

這樣就可以保證post方法的請求體中的json字符串被MappingJackson2HttpMessageConverter對象檢查并解析。

@RequestBody參數(shù)映射不上,@RequestBody報錯

最近代碼遇見了一個springmvc中的小問題,算是很基礎(chǔ)的東西,同事問我后我有有些迷惑上網(wǎng)找了一些資料后弄清楚了。特此記錄一下springmvc注解@requestbody來傳遞參數(shù)映射一個對象。

如何解決POST方法給@RequestBody傳參數(shù)失敗的問題

言歸正傳問題是這樣的

使用postMan 發(fā)送httppost 請求:

如何解決POST方法給@RequestBody傳參數(shù)失敗的問題

最后報錯。

報錯原因

在使用postMan發(fā)送post請求的時候沒有選擇如下:

如何解決POST方法給@RequestBody傳參數(shù)失敗的問題

也就是下面說的需要注意的地方需要注意的地方是:

1.前端做保存操作的時候提交了很多參數(shù)過來,前端代碼提交的時候content-type改成application/json,后臺也配置了一個針對spring4的son類型的httpmessageConverter,

@RequsetBody 綁定的數(shù)據(jù)類型 :

一般用來處理非Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù)。

GET請求中,因為沒有HttpEntity,所以@RequestBody并不適用。POST請求中,通過HttpEntity傳遞的參數(shù),必須要在請求頭中聲明數(shù)據(jù)的類型Content-Type,SpringMVC通過使用HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的數(shù)據(jù),然后綁定到相應(yīng)的bean上。

1,使用@RequestBody 前后端參數(shù)要匹配個數(shù)不能少。字段名字要一樣。

2,檢查配置文件spring的版本。對應(yīng)的 spring4 的版本的適配器 對應(yīng)的:

請用org.springframework.http.converter.json.MappingJacksonHttp2MessageConverter ,選擇的這種配置用的是jackson2.X版本的,用來解析json數(shù)據(jù)。

如何解決POST方法給@RequestBody傳參數(shù)失敗的問題

spring 3.x的對應(yīng)的版本:

org.springframework.http.converter.json.MappingJacksonHttpMessageConverter

這種配置用的是jackson1.X版本的

3,必須要在請求頭中聲明數(shù)據(jù)的類型Content-Type,

4,前端json數(shù)據(jù)和后端json數(shù)據(jù) 首字母不要大寫,首字母大寫映射不上,以駝峰格式命名。

以上是“如何解決POST方法給@RequestBody傳參數(shù)失敗的問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI