[英]Json4s: Conversion to java.sql.Timestamp does not work
我有一個案例類Ab。
case class Ab(
startTime: java.sql.Timestamp)
我得到了這個的JSON表示。
{"startTime":"2014-12-12 11:12:12"}
Json4s顯然不支持Timestamp,因此我創建了一個自定義序列化器,例如:
case object TimestampSerializer extends CustomSerializer[Timestamp](format => (
{
case JString(s) => {
Timestamp.valueOf(s)
}
case JNull => null
},
{
case tm: Timestamp => JString(tm.toString())
}))
但是,當我嘗試提取值時,出現映射異常。
我的密碼
org.json4s.jackson.JsonMethods.parse(""" {"startTime":"2014-12-12 11:12:12"} """).toString
//JObject(List((startTime,JString(2014-12-12 11:12:12))))
org.json4s.jackson.JsonMethods.parse(""" {"startTime":"2014-12-12 11:12:12"} """).extract[Ab]
//MappingException: No usable value for startTime
//Invalid date '2014-12-12 11:12:12'
像這樣編寫序列化程序:
case object TimestampSerializer extends CustomSerializer[Timestamp](format => (
{
case JInt(s) => {
new Timestamp(s)
}
case JNull => null
},
{
case tm: Timestamp => JString(tm.toString())
}))
只是覆蓋默認的dateFormatter。 它為我工作。
case class Test(startTime: Timestamp)
implicit val formats = new DefaultFormats {
override def dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
}
val t1 = parse("""{"startTime":"2014-12-12 11:12:12"}""").extract[Test]
時間戳擴展了java.util.Date。 這意味着您的自定義序列化程序不會被調用,而是使用不同格式的標准日期序列化程序。
我看到兩種解決方案:您可以使用自己的時間戳記類,也可以使用與默認的Date序列化程序一起使用的其他序列化格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.