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)始终为空。
如何正确反序列化它?
如果使用具有正确类型的getter方法(无论其名称如何),那么您就解决了这个问题。更酷的是,您可以通过@JsonDeserialize注释告诉Jackson将其反序列化为您想要的精确Map类型,例如,在相应的字段声明之前加入\t @JsonDeserialize(as = HashMap.class)。谢谢! – PNS 2011-12-22 13:20:44
即使使用@JsonDeserialize注释,getter方法也不是必需的。 – PNS 2011-12-24 08:48:59
嗯,我尝试使用JSONDeserialize作为@PNS说,但我仍然得到JsonMappingException“无法找到类型的(映射)键解串器...”嗯 – Ted 2013-01-26 23:34:28