FasterXML / FasterXML/jackson-module-scala

Inconsistent serializing/deserializing of Option[AnyVal] compared to AnyVal

Ouverte
#209 12 commentaires 3 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Scala
Étoiles
506
Forks
138
Merge moyen
3 h 6 min
PR mergées (30 j)
48

Description

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.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.