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

Java 使用Jackson将具有HashMap的对象序列化为JSON时发生映射异常,java,serialization,jackson,Java,Serialization,Jackson,我尝试使用Jackson将一个类序列化为JSON: class A { String someString; Map<String, Long> someMap; } 其中a是类a的实例 我得到一个例外: com.fasterxml.jackson.databind.JsonMappingException: java.lang.Double cannot be cast to java.lang.Long (through reference chain ...

我尝试使用Jackson将一个类序列化为JSON:

class A {
    String someString;
    Map<String, Long> someMap;
}
其中a是类a的实例

我得到一个例外:

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

我尝试过启用不同的默认键入,但没有帮助。

之所以会出现这种情况,是因为您的映射包含双精度而不是长精度。通常这是忽略警告或使用反射的结果。复制起来相当容易:

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]->java.util.HashMap[bar]


我想你的虫子在别处。地图在哪里?
A a = new A();
a.someMap = new HashMap<>();
((Map)a.someMap).put("bar", 1.0);
new ObjectMapper().writeValueAsString(a);