Java JSON哈希映射反序列化
我想反序列化这个JSON“{\'m\”:{\'Test\”:{\'nombre\”:“jose\”,“apellidos\”:“jose\”,“edad\”:30}}}到PersonalContainer中Java JSON哈希映射反序列化,java,json,jackson,Java,Json,Jackson,我想反序列化这个JSON“{\'m\”:{\'Test\”:{\'nombre\”:“jose\”,“apellidos\”:“jose\”,“edad\”:30}}}到PersonalContainer中 public class Persona { private String nombre; private String apellidos; private int edad; ... getters and setters; } pu
public class Persona {
private String nombre;
private String apellidos;
private int edad;
... getters and setters;
}
public class PersonaContainer {
private Map m = new HashMap<String,Persona>();
public Map getM() {
return m;
}
public void setM(Map m) {
this.m = m;
}
}
有什么建议吗?仅供参考
private Map m = ...;
Jackson不知道您希望映射的键和值是什么类型的。因此,它使用默认值。对于常规对象,它使用LinkedHashMap
。换句话说,它将反序列化
{"nombre":"jose","apellidos":"jose","edad":30}
进入LinkedHashMap
实例。当您尝试将它用作角色时,它会失败,出现ClassCastException
相反,不要使用原始类型。使用正确的泛型参数声明映射
private Map<String, Persona> m = ...;
私有映射m=。。。;
请注意,Spring将把相应的JSON(m
)反序列化为LinkedHashMap
,而不是HashMap
。如果您想要一个HashMap
,请声明类型为HashMap
的字段,不要使用原始类型。在PersonalContainer
中,属性m
、其getter和setter都需要使用Map
。好的,我明白了,它可以正常工作,但如果我从humano扩展persona@FedericoPeraltaSchaffner@Jose再见,谢谢,您知道我在哪里添加了´@JsonTypeInfo'和´@JsonSubTypes'注释,这告诉jackson如何反序列化此类对象@费德里科·佩拉尔塔·沙夫纳
{"nombre":"jose","apellidos":"jose","edad":30}
private Map<String, Persona> m = ...;