javamap与Jackson的反序列化

javamap与Jackson的反序列化,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我有一个简单的POJO像 public class Employee { int level; int salary; Map<String, String> details; // HashMap } 假设上述JSON字符串存储在名为JSON的Java字符串变量中, 当通过以下Jackson语句反序列化它时 Employee employee = new ObjectMapper().readValue(json, Employee.class); 对

我有一个简单的POJO像

public class Employee
{
    int level;
    int salary;

    Map<String, String> details; // HashMap
}
假设上述JSON字符串存储在名为
JSON
的Java字符串变量中, 当通过以下Jackson语句反序列化它时

Employee employee = new ObjectMapper().readValue(json, Employee.class);
对象已正确创建,没有异常发生,字段“级别”和“薪水”已正确填充,但“详细信息”字段(最初是哈希映射)始终为空


如何正确地反序列化它?

Jackson使用我机器中的Jackson版本1.8.1正确地反序列化了details属性。您是否可以确认您已经为Employee类创建了访问器,如果没有,这可能是原因。

Jackson使用我的计算机中的Jackson版本1.8.1正确地反序列化了details属性。您是否可以确认已为Employee类创建了访问器,如果没有,这可能是原因。

您是对的,如果使用具有正确类型的getter方法(无论其名称如何),则可以解决此问题。更酷的是,您可以告诉Jackson通过@JsonDeserialize注释将其反序列化为您想要的确切映射类型,例如,将@JsonDeserialize(as=HashMap.class)放在相应的字段声明之前。谢谢即使是getter方法也不是必需的,如果使用@JsonDeserialize注释。嗯,我试着像@PNS所说的那样使用JsonDeserialize,但是我仍然得到了JsonMappingException“找不到类型的(映射)键反序列化器…”hmmYou是正确的,如果使用类型正确的getter方法(无论其名称如何),那么就可以解决这个问题。更酷的是,您可以告诉Jackson通过@JsonDeserialize注释将其反序列化为您想要的确切映射类型,例如,将@JsonDeserialize(as=HashMap.class)放在相应的字段声明之前。谢谢即使getter方法也不是必需的,如果使用@JsonDeserialize注释。嗯,正如@PNS所说,我尝试使用JsonDeserialize,但我仍然得到JsonMappingException“找不到类型的(映射)键反序列化器…”嗯
Employee employee = new ObjectMapper().readValue(json, Employee.class);