2011-12-22 62 views
1

我有一個簡單的POJO喜歡的Java地圖反序列化與傑克遜

public class Employee 
{ 
    int level; 
    int salary; 

    Map<String, String> details; // HashMap 
} 

此類的序列化對象看起來像

{"level":1,"salary":30000, "details":{"address":"ADDRESS", "phone":"12345678"}} 

假設上述JSON字符串存儲在一個名爲json的Java String變量, 通過以下Jackson語句進行反串行化時

Employee employee = new ObjectMapper().readValue(json, Employee.class); 

該對象已正確創建,沒有發生異常,字段「level」和「salary」正確填充,但「details」字段(最初爲HashMap)始終爲空。

如何正確反序列化它?

回答

4

傑克遜正確地反序列化了我在我的機器-18.1中使用的傑克遜版本的細節屬性。你能否確認你有爲Employee類創建的訪問器,如果不是這可能是原因。

+1

如果使用具有正確類型的getter方法(無論其名稱如何),那麼您就解決了這個問題。更酷的是,您可以通過@JsonDeserialize註釋告訴Jackson將其反序列化爲您想要的精確Map類型,例如,在相應的字段聲明之前加入\t @JsonDeserialize(as = HashMap.class)。謝謝! – PNS 2011-12-22 13:20:44

+0

即使使用@JsonDeserialize註釋,getter方法也不是必需的。 – PNS 2011-12-24 08:48:59

+0

嗯,我嘗試使用JSONDeserialize作爲@PNS說,但我仍然得到JsonMappingException「無法找到類型的(映射)鍵解串器...」嗯 – Ted 2013-01-26 23:34:28