FasterXML / FasterXML/jackson-module-scala
Inconsistent serializing/deserializing of Option[AnyVal] compared to AnyVal
- Lingua principale
- Scala
- Stelle
- 506
- Fork
- 138
- Merge medio
- 3h 6m
- PR unite (30g)
- 48
Descrizione
scala> case class A(s: String) extends AnyVal
defined class A
scala> case class B(a: A)
defined class B
scala> objectMapper.writeValueAsString(B(A("foo")))
res1: String = {"a":"foo"}
scala> objectMapper.readValue(res1, classOf[B])
res2: B = B(A(foo))
scala> case class C(a: Option[A])
defined class C
--- Above all as expected ---
scala> objectMapper.writeValueAsString(C(Some(A("foo"))))
res3: String = {"a":{"s":"foo"}}
scala> objectMapper.readValue(res3, classOf[C])
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: {"a":{"s":"foo"}}; line: 1, column: 2]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:749)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:59)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:12)
at com.fasterxml.jackson.module.scala.deser.OptionDeserializer.deserialize(OptionDeserializerModule.scala:23)
at com.fasterxml.jackson.module.scala.deser.OptionDeserializer.deserialize(OptionDeserializerModule.scala:13)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:538)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:348)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1058)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:268)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:124)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3051)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2146)
scala> objectMapper.readValue(res1, classOf[C])
res16: C = C(Some(foo))
Is this the expected behaviour? I found it very surprising.
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Valutazione
Questa issue non è ancora stata valutata.