咱們在使用springMVC或是springboot開發中,controller類的方法中常常須要用到@RequestBody來直接將前端傳來的json字符串變成一個咱們要的對象,以方便後面的業務邏輯處理。然而,因爲一次特殊的邏輯需求,踩了@RequestBody的一個坑,因此這裏分享一下,但願能給一樣採坑的你給予必定參考。前端
在一次項目中,有這樣一個場景:個人服務須要暴露一個接口供前端掉用,拿到前端傳過來的數據以後,我須要使用HttpClient去掉另外的HTTP接口(而這裏的調用入參字段差很少就是我從前端拿到的那幾個字段)。可是這個我要在代碼中調用的HTTP接口的入參的每一個字段必須是大寫的,相似下圖的樣子(好像由於別人提供的這個接口不是REST風格的,而是XML的),因此我就乾脆讓我暴露的接口直接也接收大寫的參數字段算了,省得轉來轉去的怪麻煩(結果代表偷懶失敗。。。)spring
而後問題它就來了。。由於原本想偷懶,因此這裏我定義的實體一開始是這樣子的:json
這個時候使用上面的post請求到controller的時候,發現@RequestBody後面的實體對象中的屬性全都是null(主要是徹底不報錯)springboot
而後找緣由找了很久,百度上查了。。。。又上stackoverflow上查。。。。。。。。,而後問了身邊的大佬,終於找到了!post
這裏我就不BB了,直接貼圖爲快
一、將定義的實體的屬性改爲規範的命名對象
二、請求的參數屬性也作出相應的改變blog
三、controller中打斷點再看看發現值已經成功拿到了接口
因此最終我仍是須要將受到的字段屬性轉換成大寫命名的參數屬性,而後再將它們做爲入參傳入到使用HttpClient調用的那個接口去請求別的服務提供的遠程HTTP接口。
所以最終偷懶失敗,估計那個遠程HTTP接口使用的仍是那種老的XML風格的,因此提供這個接口的服務估計也是一個比較有歷史的項目了。開發