gpt4 book ai didi

java - 找不到类型 [简单类型,类 java.lang.Class] 的 (Map) 键反序列化器

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:25 25 4
gpt4 key购买 nike

我用 Jackson 序列化了一个 Map<Class<?>, BaseClass> . 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<?>吗?因为它是核心 JDK 类型?

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

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

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

最佳答案

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

关于java - 找不到类型 [简单类型,类 java.lang.Class<java.lang.Object>] 的 (Map) 键反序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27119618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com