2015-03-02 79 views
4

我正在使用play.api.libs.json._庫。我有這種Scala課程。我需要以Json格式讀/寫這個類。由於Timestamp沒有隱含的讀寫器。我必須提供我自己的。不幸的是,我嘗試了幾種方法,都沒有工作。你能告訴我怎麼做?提前致謝!時間戳Scala playframework隱式讀寫器

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 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) 

    } 
+0

的toJSON,timestampToDateTime,fromJson,dateTimeToTimestamp未定義的編譯錯誤。我是否需要導入一些額外的庫? – masiboo 2015-03-03 07:27:06

+0

對不起,我忘了添加這個功能的實現 – 2015-03-03 08:42:24

+0

dateTimeToTimestamp需要DateTime參數。所以如何調用def reads(json:JsValue):JsResult [Timestamp] = fromJson [DateTime](json).map(dateTimeToTimestamp)?仍然是Json,來自Json未定義。 – masiboo 2015-03-04 11:21:49

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