spring中使用@RequestBody,對應的bean中屬性名大寫注入爲空的解決方法

    最近做項目用到了spring的新特性@RequestBody,非常好用,客戶端發送的json串直接給轉換並且注入給bean,以前自己用都是按照SUN的java命名規範進行的項目開發,沒發覺有什麼異常。

    給客戶做項目,得按照客戶的需求來,客戶的需求是不受什麼規範約束的,恰好客戶給的需求是json串裏面的變量名首字母全是大寫,囧,如果按照常規java命名規則的話這是給class命名的方法。

    等到做出幾個接口之後,自己測試時,發現用@RequestBody死活將客戶端傳過來的變量賦不到相應的bean中,一時的感覺真是有點無奈,客戶不按規則出牌,自己必須給他的不按規則買單。

    經過思考,通常的Controller類是可以自己指定名字的,指定的方法就是@Controller("XXX"),那麼與json串對應的bean裏面的變量應該也是可以自用指定名字的,經過一番搜索終於找到了答案。

    1.正確的處理方法:

      給每個屬性指定別名,指定的方法與controller類似,如下:

public class User {
	
	@JsonProperty(value = "Name")
	private String name;
	
	@JsonProperty(value = "Age")
	private int age;
}
    經過指定相應的名字後,我遇到的問題就被解決了。

    2.分析出現錯誤的原因:

    由於注入時,使用的是setName(...),setSex(...),按照java的命名規範,對應的變量,name和sex會被賦值,但是如果變量命名爲Name和Sex的話,雖然生成的setter函數依然是setName(...),setSex(...),但是spring框架注入時就無法分辨到底是name還是Name,依然會按照命名規則來,所以依然會給name賦值,如果恰好沒有按照命名規則來,使用的是Name的話,就無法完成注入。

    3.結論:

    編寫java在沒有其他原因的情況下,最還還是按照java編程規範來編寫,畢竟是一套約定俗成的規則,大家都在按照這個規則在做事,如果不按常理出牌,那麼出問題是不可避免的,出了這種問題解決起來也是相當的麻煩,畢竟spring框架不是誰都能改的。

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