我有一个案例calss
import java.sql.Date
case class GetMilestoneLanguage(
...
due_date: Option[Date],
...
)
object GetMilestoneLanguage {
implicit val writes = Json.writes[GetMilestoneLanguage]
}
以UTC输出JSON - 我需要它是iso 8601.我不是在使用Joda时间。
在iso 8601中获取日期的最简单方法是什么?
由于
答案 0 :(得分:7)
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]
}
这里的关键是定义你自己的隐式Writes[java.util.Date]
。如果您导入DefaultDateWrites
,您的customDateWrites
将被默默忽略(我想知道为什么没有含糊不清的隐含警告)。
答案 1 :(得分:1)
您可以使用Writes[java.util.Date]
随播广告对象上提供的帮助程序创建自定义Writes
。但是,您将无法使用Json.writes
宏助手。
import play.api.libs.json._
import play.api.libs.functional.syntax._
import play.api.libs.json.Writes._
case class GetMilestoneLanguage(param1: String, dueDate: Option[Date], param3: String)
object GetMilestoneLanguage {
implicit val writes = (
(__ \ "param1").write[String] and
(__ \ "due_date").write(dateWrites("yyyy-MM-dd'T'HH:mm:ss'Z'")) and
(__ \ "param3").write[String]
)(unlift(GetMilestoneLanguage.unapply))
}