2014-12-03 124 views
2

我有一个情况下CALSS如何使用JSON写入将日期写入ISO 8601格式?

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

其输出JSON在UTC - 我需要它是ISO 8601。我不使用乔达时间。

在iso8601中获取日期的最简单方法是什么?

感谢

回答

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

你可以做'import play.api.libs.json.Writes。{dateWrites => _,_ => _}'来导入除'dateWrites'之外的所有东西,我想。你的回答比我的好。 – Ryan 2014-12-04 17:54:00

+0

感谢您的提示!我不知道这种语法。 – Dimitri 2014-12-04 17:57:00

+0

谢谢 - 刚刚踏入我的接受在这里 - 因为它通过使用json写入宏助手保存锅炉板 – brent 2014-12-07 15:10:45

1

您可以使用所提供的Writes同伴对象上的助手创建自定义Writes[java.util.Date]。尽管如此,您将无法使用宏帮助程序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)) 
}