FasterXML / FasterXML/jackson-module-scala

After 2.3.2 migration, "No suitable constructor ..." on List[X] for type X

Abierto
#151 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Default Parameters
Lenguaje dominante
Scala
Estrellas
506
Forks
138
Merge medio
3 h 6 min
PR fusionados (30 d)
48

Descripción

As I needed a fix for polymorphism on Option https://github.com/FasterXML/jackson-module-scala/issues/125 I updated to 2.3.2.
I don't know if it works fine but it introduced a new kind of error in my code base that used to work with 2.2.0:

```
Caused by: java.lang.IllegalArgumentException: Can't unserialize json class=class models.Stample:
{
"author" : "",
"source" : "",
"categoryId" : "5087de9be4b078ca9f03f225",
"_typeHint" : "models.Stample",
"history" : [ {
"userId" : "5087de9be4b078ca9f03f224",
"userProfile" : {
"username" : "herqule",
"avatarUrl" : "http://www.gravatar.com/avatar/b2495caca536aa0a730da3f0aeace952?d=404",
"profilePicture" : "https://s3.amazonaws.com/com.stample.s3/stample-5087de9be4b078ca9f03f2241386000334039-sebastienlorber.jpg",
"lastName" : "Sebastien Lorber",
"firstName" : "",
"fullname" : "Sebastien Lorber"
},
"date" : "2014-03-26T10:02:09.387Z"
} ],
"description" : "",
"labelColor" : "",
"stampleType" : "Stample",
"sourcePublicationDate" : "",
"stampleSharing" : {
"public" : false
},
"id" : "5332a5a1e4b0f3da2af015d5",
"breadcrumb" : [ {
"_id" : "5087de9be4b078ca9f03f225",
"name" : "Home"
} ],
"content" : {
"hashtags" : [ "#roberto" ]
},
"creationDate" : 1395828129387,
"position" : 1.395828129387E12,
"userId" : "5087de9be4b078ca9f03f224",
"title" : "test",
"props" : {
"mentionedUserIds" : [ ],
"spotonUsers" : [ ],
"followers" : [ "5087de9be4b078ca9f03f224" ],
"locked" : false,
"stampleLastEvent" : {
"all" : "2014-05-26T10:46:51.390Z"
},
"nbcomments" : 0
},
"summary" : ""
}
at utils.CustomSerializer$$anonfun$unserialize$2.applyOrElse(CustomSerializer.scala:65) ~[classes/:na]
at utils.CustomSerializer$$anonfun$unserialize$2.applyOrElse(CustomSerializer.scala:64) ~[classes/:na]
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33) ~[scala-library-2.10.3.jar:na]
at scala.util.Failure$$anonfun$recover$1.apply(Try.scala:185) ~[scala-library-2.10.3.jar:na]
at scala.util.Try$.apply(Try.scala:161) ~[scala-library-2.10.3.jar:na]
at scala.util.Failure.recover(Try.scala:185) ~[scala-library-2.10.3.jar:na]
at utils.CustomSerializer$.unserialize(CustomSerializer.scala:64) ~[classes/:na]
at controllers.SearchController$$anonfun$3.apply(SearchController.scala:78) ~[classes/:na]
at controllers.SearchController$$anonfun$3.apply(SearchController.scala:77) ~[classes/:na]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library-2.10.3.jar:na]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library-2.10.3.jar:na]
at scala.collection.Iterator$class.foreach(Iterator.scala:727) ~[scala-library-2.10.3.jar:na]
at scala.collection.AbstractIterator.foreach(Iterator.scala:1157) ~[scala-library-2.10.3.jar:na]
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72) ~[scala-library-2.10.3.jar:na]
at scala.collection.AbstractIterable.foreach(Iterable.scala:54) ~[scala-library-2.10.3.jar:na]
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) ~[scala-library-2.10.3.jar:na]
at scala.collection.AbstractTraversable.map(Traversable.scala:105) ~[scala-library-2.10.3.jar:na]
at controllers.SearchController$.enhanceResult(SearchController.scala:77) ~[classes/:na]
at controllers.SearchController$$anonfun$getSearchResults$1$$anonfun$apply$2.apply(SearchController.scala:57) ~[classes/:na]
at controllers.SearchController$$anonfun$getSearchResults$1$$anonfun$apply$2.apply(SearchController.scala:50) ~[classes/:na]
at controllers.BaseController$$anonfun$whenSuccessfulForm$2.apply(BaseController.scala:318) ~[classes/:na]
at controllers.BaseController$$anonfun$whenSuccessfulForm$2.apply(BaseController.scala:318) ~[classes/:na]
at play.api.data.Form.fold(Form.scala:136) ~[play_2.10-2.2.2.jar:2.2.2]
at controllers.BaseController$class.whenSuccessfulForm(BaseController.scala:316) ~[classes/:na]
at controllers.SearchController$.whenSuccessfulForm(SearchController.scala:21) ~[classes/:na]
at controllers.SearchController$$anonfun$getSearchResults$1.apply(SearchController.scala:50) ~[classes/:na]
at controllers.SearchController$$anonfun$getSearchResults$1.apply(SearchController.scala:49) ~[classes/:na]
at controllers.BaseController$$anonfun$controllers$BaseController$$withUserInMDC$1.apply(BaseController.scala:252) ~[classes/:na]
at controllers.BaseController$$anonfun$controllers$BaseController$$withUserInMDC$1.apply(BaseController.scala:249) ~[classes/:na]
at controllers.BaseController$$anonfun$sr$1$1$$anonfun$apply$1.apply(BaseController.scala:208) ~[classes/:na]
at controllers.BaseController$$anonfun$sr$1$1$$anonfun$apply$1.apply(BaseController.scala:208) ~[classes/:na]
at scala.util.Try$.apply(Try.scala:161) ~[scala-library-2.10.3.jar:na]
at controllers.BaseController$class.controllers$BaseController$$wrapUserRelatedRuntimeExceptions(BaseController.scala:236) ~[classes/:na]
... 39 common frames omitted
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class models.StampleHistory]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: java.io.StringReader@31a69bf3; line: 1, column: 322]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1078) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:268) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:124) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:227) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:204) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.module.scala.deser.SeqDeserializer.deserialize(SeqDeserializerModule.scala:76) ~[jackson-module-scala_2.10-2.3.2.jar:na]
at com.fasterxml.jackson.module.scala.deser.SeqDeserializer.deserialize(SeqDeserializerModule.scala:59) ~[jackson-module-scala_2.10-2.3.2.jar:na]
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:525) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:331) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1071) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:268) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:124) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993) ~[jackson-databind-2.3.2.jar:2.3.2]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2098) ~[jackson-databind-2.3.2.jar:2.3.2]
at utils.CustomSerializer$$anonfun$unserialize$5.apply(CustomSerializer.scala:63) ~[classes/:na]
at scala.util.Try$.apply(Try.scala:161) ~[scala-library-2.10.3.jar:na]
at utils.CustomSerializer$.unserialize(CustomSerializer.scala:62) ~[classes/:na]
... 65 common frames omitted
```

```
@JsonIgnoreProperties(ignoreUnknown = true)
case class Stample(
....................,
history: List[StampleHistory] = Nil,
....................
)

@JsonIgnoreProperties(ignoreUnknown = true)
@deprecated
case class StampleHistory(userId: ObjectId, userProfile: Option[UserProfile] = None, @JsonIgnore date: DateTime = new DateTime())

@JsonIgnoreProperties(ignoreUnknown = true)
case class UserProfile(
username: String,
fullname: String,
firstName: String = "",
lastName: String = "",
avatarUrl: Option[String] = None,
profilePicture: Option[String] = None)
```

Any idea why this deserialization doesn't work anymore?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.