FasterXML / FasterXML/jackson-module-scala

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

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

Description

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?

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.