簡體   English   中英

Json4s:轉換為java.sql.Timestamp不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM