我尝试使用play框架将对象序列化为Json,但该对象的一个参数是Timestamp对象。因此,当我打电话
implicit val eventFormat = Json.format[Event]
我收到Timestamp未序列化的错误。我知道我可以手动写出Writes函数,其中我单独执行每个成员,然后将Timestamp对象转换为DateTime对象,但我想知道是否有更简单的方法。
我最终试图序列化一个case类,这是一个map,将一个字符串映射到一个Event,因此需要尽可能轻松地序列化Event。
答案 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)