FasterXML / FasterXML/jackson-module-scala

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

Open
#151 2 comments 0 reactions 0 assignees View on GitHub
Default Parameters
Dominant language
Scala
Stars
506
Forks
138
Avg merge
3h 6m
Merged PRs (30d)
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?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.