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風格的,所以提供這個接口的服務估計也是一個比較有歷史的項目了。

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