Skip to content

Cannot deserialize a Map whose key is a case class? #251

Open
@ms-ati

Description

@ms-ati

Are Maps with keys that are simple case classes (of one primitive field) supported?

import com.fasterxml.jackson.databind._
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper

val mapper = (new ObjectMapper() with ScalaObjectMapper).
        registerModule(DefaultScalaModule).
        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).
        findAndRegisterModules(). // register joda and java-time modules automatically
        asInstanceOf[ObjectMapper with ScalaObjectMapper]

case class Foo(n: Int)

val m: Map[Foo, String] = Map(Foo(1) -> "bar")

val s = mapper.writeValueAsString(m)
// s: String = {"Foo(1)":"bar"}

mapper.readValue[Map[Foo, String]](s)
// com.fasterxml.jackson.databind.JsonMappingException: Can not find a (Map) Key deserializer for type [simple type, class Foo]
// at [Source: {"Foo(1)":"bar"}; line: 1, column: 1]
// at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:244)
// at com.fasterxml.jackson.databind.deser.DeserializerCache._handleUnknownKeyDeserializer(DeserializerCache.java:587)
// at com.fasterxml.jackson.databind.deser.DeserializerCache.findKeyDeserializer(DeserializerCache.java:168)
// at com.fasterxml.jackson.databind.DeserializationContext.findKeyDeserializer(DeserializationContext.java:500)
// at com.fasterxml.jackson.module.scala.deser.UnsortedMapDeserializer$$anonfun$1.apply(UnsortedMapDeserializerModule.scala:70)
// at com.fasterxml.jackson.module.scala.deser.UnsortedMapDeserializer$$anonfun$1.apply(UnsortedMapDeserializerModule.scala:70)
// at scala.Option.getOrElse(Option.scala:121)
// at com.fasterxml.jackson.module.scala.deser.UnsortedMapDeserializer.createContextual(UnsortedMapDeserializerModule.scala:70)
// at com.fasterxml.jackson.module.scala.deser.UnsortedMapDeserializer.createContextual(UnsortedMapDeserializerModule.scala:39)
// at com.fasterxml.jackson.databind.DeserializationContext.handleSecondaryContextualization(DeserializationContext.java:685)
// at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:482)
// at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3890)
// at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3785)
// at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2817)
// at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.readValue(ScalaObjectMapper.scala:184)
// at $anon$1.readValue(<console>:17)
// ... 42 elided

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions