Controller方法中使用@RequestBody接收到的值為空?


記一次使用@RequestBody收到的對象中的屬性值為null的問題

我們在使用springMVC或是springboot開發中,controller類的方法中經常需要用到@RequestBody來直接將前端傳來的json字符串變成一個我們要的對象,以方便后面的業務邏輯處理。然而,由於一次特殊的邏輯需求,踩了@RequestBody的一個坑,所以這里分享一下,希望能給同樣采坑的你給予一定參考。


背景

在一次項目中,有這樣一個場景:我的服務需要暴露一個接口供前端掉用,拿到前端傳過來的數據之后,我需要使用HttpClient去掉另外的HTTP接口(而這里的調用入參字段差不多就是我從前端拿到的那幾個字段)。但是這個我要在代碼中調用的HTTP接口的入參的每個字段必須是大寫的,類似下圖的樣子(好像因為別人提供的這個接口不是REST風格的,而是XML的),所以我就干脆讓我暴露的接口直接也接收大寫的參數字段算了,免得轉來轉去的怪麻煩(結果表明偷懶失敗。。。)

問題

然后問題它就來了。。因為本來想偷懶,所以這里我定義的實體一開始是這樣子的:

這個時候使用上面的post請求到controller的時候,發現@RequestBody后面的實體對象中的屬性全都是null(主要是完全不報錯)

然后找原因找了好久,百度上查了。。。。又上stackoverflow上查。。。。。。。。,然后問了身邊的大佬,終於找到了!


解決

這里我就不BB了,直接貼圖為快
1、將定義的實體的屬性改成規范的命名

2、請求的參數屬性也做出相應的改變

3、controller中打斷點再看看發現值已經成功拿到了

所以最終我還是需要將受到的字段屬性轉換成大寫命名的參數屬性,然后再將它們作為入參傳入到使用HttpClient調用的那個接口去請求別的服務提供的遠程HTTP接口。
因此最終偷懶失敗,估計那個遠程HTTP接口使用的還是那種老的XML風格的,所以提供這個接口的服務估計也是一個比較有歷史的項目了。


免責聲明!

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



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