Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I write dates to ISO 8601 format using JSON Writes?

I've got a case calss

import java.sql.Date
case class GetMilestoneLanguage(
                               ...
                   due_date: Option[Date],
                                ...
                   )
object GetMilestoneLanguage {
  implicit val writes = Json.writes[GetMilestoneLanguage]
}

Its outputting the JSON in UTC - and I need it to be iso 8601. I'm NOT use Joda time.

What the easiest way to achieve getting the date in iso 8601?

Thanks

like image 892
brent Avatar asked Nov 24 '25 01:11

brent


1 Answers

import play.api.libs.json.{Json, Writes}
import play.api.libs.json.Writes.dateWrites // do not import everything here, especially DefaultDateWrites

case class GetMilestoneLanguage(param1: String, dueDate: Option[java.sql.Date])

object GetMilestoneLanguage {
  implicit val customDateWrites: Writes[java.util.Date] = dateWrites("yyyy-MM-dd'T'HH:mm:ss'Z'")

  implicit val writes =  Json.writes[GetMilestoneLanguage]
}

The key here is to define your own implicit Writes[java.util.Date]. If you import DefaultDateWrites your customDateWrites will be silently ignored (I wonder why there is no ambiguous implicit warning).

like image 124
Dimitri Avatar answered Nov 25 '25 17:11

Dimitri