用jackson的@JsonProperty註解屬性名,會多出一個字段

遇見了這個情況,我的字段定義是xVal,yVal,用的lombok的@Data註解。
然後查詢到了下面這偏文章,https://bbs.csdn.net/topics/392305619,裏面的回答是圖片,我只是翻譯一下圖片而已

以下是引用的原文:
jackson2對pojo類型序列化的處理。

Jackson2在初始化序列器時,對pojo類型對象會收集其屬性信息,屬性包括成員變量及方法,然後屬性名稱和處理過後的方法名稱做爲key保存到一個LinkedHashMap中。收集過程中會調用com.fasterxml.jackson.databind.util.BeanUtil中的legacyManglePropertyName方法用來處理方法名稱,它會將get/set方法前綴,即get或set去掉,並將其後面的連續大寫字符轉換成小寫字符返回。例如: getNEWString會轉變成newstring返回。你的屬性名稱如果有這樣的"nSmallSellCount",lombok自動生成的get方法就會是這樣的"getNSmallSellCount",處理過後就是這樣的"nsmallSellCount",這與屬性nSmallSellCount並不衝突,可以同時存在於HashMap中。收集完屬性信息後,下面的步驟中會刪除掉非可見的屬性,一般指的是私有成員變量,這時,名稱爲"nSmallSellCount"的成員變量屬性會被刪除掉,這樣的序列化結果是不會有問題的,但,如果加了@JsonProperty註釋,Jackson2會認爲這個屬性是可見的,不必會刪除,這時這兩個表示同一個值得屬性就會被一同序列化。


翻譯完畢,好累。。。。

總結一下知識點:
1.jackson默認序列化時只去get set方法的字段,私有字段是不參與序列化的
2.@JsonProperty 註解在私有屬性上,標明該私有字段在序列化時可見,另外可以指定序列化的名稱。
3.@JsonProperty 如果標註在get set方法上就不會有問題br/>4.項目中使用了lombok的@Data註解,所以只能標註在屬性上,這就導致了出問題。
5.解決辦法,手動編寫get set方法,註解加到方法上。

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