【问题标题】:Can not find a (Map) Key deserializer for type [simple type, class java.lang.Class<java.lang.Object>]找不到类型 [simple type, class java.lang.Class<java.lang.Object>] 的 (Map) Key 反序列化器
【发布时间】:2015-01-23 00:54:20
【问题描述】:

我使用 Jackson 序列化 Map&lt;Class&lt;?&gt;, BaseClass&gt;BaseClass 有多个子类,每个子类都经过适当的注解以供 Jackson 序列化/反序列化。

  1. 是否可以调用 ObjectMapper.readValue(file, Subclass.class) 并返回 Subclass 实例?
  2. 如果是这样,我该如何避免这个异常?
com.fasterxml.jackson.databind.JsonMappingException: Can not find a (Map) Key deserializer for type [simple type, class java.lang.Class<java.lang.Object>]
    at com.fasterxml.jackson.databind.deser.DeserializerCache._handleUnknownKeyDeserializer(DeserializerCache.java:578)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findKeyDeserializer(DeserializerCache.java:168)
    at com.fasterxml.jackson.databind.DeserializationContext.findKeyDeserializer(DeserializationContext.java:404)
    at com.fasterxml.jackson.databind.deser.std.MapDeserializer.createContextual(MapDeserializer.java:231)
    at com.fasterxml.jackson.databind.DeserializationContext.handleSecondaryContextualization(DeserializationContext.java:581)
    at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:369)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:842)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:514)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:292)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:241)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:381)
    at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3154)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3047)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2100)
  1. Jackson 不应该知道如何反序列化 Class&lt;?&gt;,因为它是核心 JDK 类型吗?

更新:我找到了https://stackoverflow.com/a/13954871/14731,它讨论了如何在 Jackson 中实现多态性。这回答了问题 #1,但给我们留下了问题 #2 和 #3。

UPDATE2:很有趣。我找到了ClassSerializer.java,但是https://github.com/FasterXML/jackson-databind/tree/master/src/main/java/com/fasterxml/jackson/databind/deser/std中没有对应的ClassDeserializer.java

UPDATE3:提交错误报告:https://github.com/FasterXML/jackson-databind/issues/630

【问题讨论】:

    标签: java jackson


    【解决方案1】:

    这是一个已知错误,应该在 2.5.0 版中修复:https://github.com/FasterXML/jackson-databind/issues/630

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 2020-01-16
      • 1970-01-01
      相关资源
      最近更新 更多