2015-03-02 58 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