2015-03-02 2 views
4

Я использую библиотеку play.api.libs.json._. У меня есть класс Scala. Мне нужно читать/писать этот класс в формате Json. Поскольку для Timestamp нет неявного чтения/записи. Я должен предоставить свои собственные. К сожалению, я пробовал пару способов, но никто из них не работал. Не могли бы вы предложить мне, как это делается? Заранее спасибо!Scala playframework неявный читатель для Timestamp

case class Event(id: Long, startTime: Option[java.sql.Timestamp] = None, endTime: Option[java.sql.Timestamp] = None) 

Я хотел бы POST/GET в следующем формате JSON

{ 
    "id": 1, 
    "startTime": "2011-10-02 18:48:05.123456", 
    "endTime": "2011-10-02 20:48:05.123456" 
} 

ответ

6

просто добавить перед тем Json чтения или Json Формат для класса Event

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) 

    } 
+0

toJson, timestampToDateTime, fromJson, dateTimeToTimestamp ошибка не определен компилятор. Нужно ли мне импортировать некоторую дополнительную библиотеку? – masiboo

+0

Извините, я забыл добавить реализацию для этих функций –

+0

dateTimeToTimestamp принимает параметр DateTime. Итак, как вызвать def reads (json: JsValue): JsResult [Timestamp] = fromJson [DateTime] (json) .map (dateTimeToTimestamp)? Тем не менее toJson, fromJson undefined. – masiboo

3

Что я сделал код для личной проект:

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.

Источник: https://github.com/BinaryBrain/Gamers/blob/master/server/play/app/models/Package.scala

 Смежные вопросы

  • Нет связанных вопросов^_^