使用时间戳将Play类中的Case类序列化为Json

时间:2016-06-16 21:53:47

标签: json scala serialization playframework

我尝试使用play框架将对象序列化为Json,但该对象的一个​​参数是Timestamp对象。因此,当我打电话

implicit val eventFormat = Json.format[Event]

我收到Timestamp未序列化的错误。我知道我可以手动写出Writes函数,其中我单独执行每个成员,然后将Timestamp对象转换为DateTime对象,但我想知道是否有更简单的方法。

我最终试图序列化一个case类,这是一个map,将一个字符串映射到一个Event,因此需要尽可能轻松地序列化Event。

1 个答案:

答案 0 :(得分:2)

尝试:

import java.sql.Timestamp
import org.joda.time.DateTime
import play.api.libs.json._

    object Event {
      implicit val timestampFormat = new Format[Timestamp] {
        def reads(json: JsValue): JsResult[Timestamp] = json match{
          case JsNumber(bigDecimal) =>
            JsSuccess(new Timestamp(bigDecimal.toLong))
          case JsString(txtFormat) =>
            JsSuccess(new Timestamp(DateTime.parse(txtFormat).getMillis))
          case _ =>
            JsError(s"Wrong timestamp format: $json")
        }
        def writes(o: Timestamp): JsValue = JsNumber(o.getTime)
        //def writes(o: Timestamp): JsValue = JsString(new DateTime(o.getTime).toString)
      }
      implicit val eventFormat = Json.format[Event]
    }

    case class Event(timestamp:Timestamp)