Skip to content

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

@slorber

Description

@slorber

As I needed a fix for polymorphism on Option #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?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions