私はケースクラス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())
}))