FasterXML / FasterXML/jackson-module-scala

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

Đang mở
#209 12 bình luận 3 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Scala
Star
506
Fork
138
Merge trung bình
3 giờ 6 phút
Pull request đã merge (30 ngày)
48

Mô tả

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.

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.