jsonscalaserializationdeserializationplayframework-2.1

Custom JodaTime serializer using Play Framework's JSON library?


How do I implement a custom JodaTime's DateTime serializer/deserializer for JSON? I'm inclined to use the Play Framework's JSON library (2.1.1). There is a default DateTime serializer, but it uses dt.getMillis instead of .toString which would return an ISO compliant String.

Writing Reads[T] and Writes[T] for case classes seems fairly straightforward, but I can't figure out how to do the same for DateTime.


Solution

  • I use Play 2.3.7 and define in companion object implicit reads/writes with string pattern:

    case class User(username:String, birthday:org.joda.time.DateTime)
    
    object User {
      implicit val yourJodaDateReads = Reads.jodaDateReads("yyyy-MM-dd'T'HH:mm:ss'Z'")
      implicit val yourJodaDateWrites = Writes.jodaDateWrites("yyyy-MM-dd'T'HH:mm:ss'Z'")
      implicit val userFormat = Json.format[User]
    }