Play Framework unable to deserialize JSON read from Mongo

163 Views Asked by At

Our application uses Play, ReactiveMongo Scala driver and Mongo DB. We have the following versions of these components:

  • com.typesafe.play %% play-json % 2.5.18
  • com.typesafe.play %% play % 2.5.18
  • com.typesafe.play %% play-ws % 2.5.18
  • org.reactivemongo %% play2-reactivemongo % 0.20.3-play25
  • org.reactivemongo %% reactivemongo-play-json % 0.20.3-play25
  • org.reactivemongo % reactivemongo-bson_2.11 % 0.20.3
  • org.reactivemongo %% reactivemongo % 0.20.3

There is a JSON object in MongoDB that looks like this:

“status” : { “siteStatus” : “InProgress”, "timestamp" : NumberLong(“1585696318513”), “timestampLocalDateTime” : “2020-03-31T23:11:58” }

When our application tries to read this object, we get this error: JsResultException(errors:List((,List(ValidationError(List(error.expected.jsnumber),WrappedArray())))))

The attribute that is causing this error is: “timestamp” : NumberLong(“1585696318513”). Play Framework expects it to be in this format: “timestamp” : “1585696318513” but Mongo DB stores it by adding some additional type information which they call Extended-JSON.

The Scala class corresponding to this JSON is:

case class Status(siteStatus: SiteStatus, timestamp: Long, timestampLocalDateTime: Option[LocalDateTime] = None, msg: Option[String] = None)

object Status {
implicit val format: OFormat[Status] = Json.format[Status]
}

We never had any issues parsing this JSON when we were using the older version of play-reactiveMongo library:

“org.reactivemongo” %% “play2-reactivemongo” % “0.12.4”

This error only started happening after upgrading to “play2-reactivemongo” % “0.20.3-play25”. Any work arounds? Please help.

Thank you.

0

There are 0 best solutions below