Unable to find the (Map) Key descriptor for type [simple type, class java.lang.Class <java.lang.Object>]

I used Jackson for serialization Map<Class<?>, BaseClass>

. There are several subclasses BaseClass

, and each one is annotated appropriately for serializing / deserializing Jackson.

  • Can an ObjectMapper.readValue(file, Subclass.class)

    instance be called and returned Subclass

    ?
  • If so, how can I avoid this exception?
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. Doesn't Jackson know how to deserialize Class<?>

    since this is the underlying JDK type?

UPDATE . I found this StackOverflow question discussing how to implement Polymorphism in Jackson. This answers question # 1, but leaves us with questions # 2 and # 3.

UPDATE2 : Interesting. I found ClassSerializer.java but there is no corresponding one ClassDeserializer.java

in https://github.com/FasterXML/jackson-databind/tree/master/src/main/java/com/fasterxml/jackson/databind/deser/std

UPDATE3 : Bug posted: https://github.com/FasterXML/jackson-databind/issues/630

+3


source to share


1 answer


This is a known bug and should be fixed in 2.5.0: https://github.com/FasterXML/jackson-databind/issues/630



+1


source







All Articles