2

私はケースクラスAbを持っています。

case class Ab(
   startTime: java.sql.Timestamp)

これの JSON 表現を取得します。

 {"startTime":"2014-12-12 11:12:12"}

Json4s は明らかにタイムスタンプをサポートしていないため、次のようなカスタム シリアライザーを作成しました。


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

4

2 に答える 2

5

デフォルトの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]
于 2014-12-11T13:14:09.337 に答える