使用Jackson将具有HashMap的对象序列化为JSON时映射异常

时间:2017-01-18 07:47:17

标签: java serialization jackson

我正在尝试使用Jackson序列化为JSON的类:

class A {
    String someString;
    Map<String, Long> someMap;
}

我使用以下代码进行序列化:

mapper.writeValueAsString(a);

其中a是A类的实例。

我得到了这个例外:

com.fasterxml.jackson.databind.JsonMappingException: java.lang.Double cannot be cast to java.lang.Long (through reference chain ... java.util.HashMap)

我尝试过启用不同的默认打字,但这没有帮助。

1 个答案:

答案 0 :(得分:1)

这是因为您的地图包含Double而不是Long。通常这是忽略警告或使用反射的结果。它很容易重现:

A a = new A();
a.someMap = new HashMap<>();
((Map)a.someMap).put("bar", 1.0);
new ObjectMapper().writeValueAsString(a);
  

com.fasterxml.jackson.databind.JsonMappingException:java.lang.Double无法强制转换为java.lang.Long(通过引用链:A [“someMap”] - &gt; java.util.HashMap [“bar” ])