Scala playframework неявный читатель писатель для метки времени
Я использую игру.прикладной программный интерфейс.библиотеки.формат JSON._ библиотека. У меня есть такой класс Scala. Мне нужно прочитать / записать этот класс в формате Json. Как нет никакого неявного читателя / писателя для метки времени. Я должен обеспечить себя сам. Я попробовал пару способов, к сожалению, ни один из них не сработал. Не могли бы вы подсказать мне, как это делается? Заранее спасибо!
case class Event(id: Long, startTime: Option[java.sql.Timestamp] = None, endTime: Option[java.sql.Timestamp] = None)
Я хотел бы опубликовать / получить в следующем формате Json
{
"id": 1,
"startTime": "2011-10-02 18:48:05.123456",
"endTime": "2011-10-02 20:48:05.123456"
}
2 ответа:
Просто добавьте перед JSON Reader или формат Json для класса событий
import play.api.libs.json.Json._ import play.api.libs.json._ def timestampToDateTime(t: Timestamp): DateTime = new DateTime(t.getTime) def dateTimeToTimestamp(dt: DateTime): Timestamp = new Timestamp(dt.getMillis) implicit val timestampFormat = new Format[Timestamp] { def writes(t: Timestamp): JsValue = toJson(timestampToDateTime(t)) def reads(json: JsValue): JsResult[Timestamp] = fromJson[DateTime](json).map(dateTimeToTimestamp) }
Что я сделал с кодом для личного проекта:
implicit object timestampFormat extends Format[Timestamp] { val format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SS'Z'") def reads(json: JsValue) = { val str = json.as[String] JsSuccess(new Timestamp(format.parse(str).getTime)) } def writes(ts: Timestamp) = JsString(format.format(ts)) }
И не забудьте импортировать это:
import java.sql.Timestamp import java.text.SimpleDateFormat import play.api.Play.current import play.api.libs.json._
Он уважает стандарт JavaScript dates.
Источник: https://github.com/BinaryBrain/Gamers/blob/master/server/play/app/models/Package.scala