2011-12-22 70 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