【问题标题】:Serialize Case Class to Json in Play Framework with Timestamp使用时间戳在 Play 框架中将案例类序列化为 Json
【发布时间】:2016-10-18 14:33:44
【问题描述】:

我正在尝试使用播放框架将对象序列化为 Json,但该对象的参数之一是 Timestamp 对象。因此,当我打电话时

implicit val eventFormat = Json.format[Event]

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

我最终试图序列化一个作为映射的案例类,将一个字符串映射到一个事件,因此需要尽可能轻松地序列化事件。

【问题讨论】:

  • 您可以提供Format[Timestamp],以便format 宏可以为具有Timestamp 属性的案例类生成OFormat

标签: json scala serialization playframework


【解决方案1】:

试试:

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)

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2013-02-09
    • 1970-01-01
    • 2018-02-08
    • 2015-10-29
    • 2017-04-10
    • 2020-10-08
    • 2014-11-17
    • 2014-08-09
    相关资源
    最近更新 更多