FasterXML / FasterXML/jackson-module-scala

Cannot deserialize a Map whose key is a case class?

Open
#251 7 comments 0 reactions 0 assignees View on GitHub
Scala Reflection
Dominant language
Scala
Stars
506
Forks
138
Avg merge
3h 6m
Merged PRs (30d)
48

Description

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

``` scala
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(:17)
// ... 42 elided
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.