3

Jerkson JsonライブラリJacksonのラッパー)Dateを使用して、を含むオブジェクトをシリアル化しています。

import com.codahale.jerkson.Json
import java.util.Date

case class JTest(
    val dTest: Date
)

val jt = new JTest(new Date())
println(Json.generate(jt))

その結果:

{"dTest":1353576079168}

フォーマットを指定したり、母関数をオーバーライドしたりする方法はありますか?

Jsonには適切なDate型がないため、出力(UNIX時間(ミリ秒))は「正しい」ことに気付きました。簡単に解析でき、人間が読める形式であるため、日付をISO 8601(時間/タイムゾーン付き)形式の文字列としてシリアル化したいと思います。のtoStringが吐き出します。2007-04-05T01:12:22+0100DateThu Nov 22 10:27:54 CET 2012

4

1 に答える 1

1

ここには2つの問題があります。まず、ISO8601の日付のマイナーな問題-これらはSimpleDateFormatを使用して達成できます。

import java.text._
import java.util._
val d1 = new Date()
val sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
println(sdf.format(d1))

フォーマッターは、フォーマットだけでなく解析も行います。スレッドセーフではないため、スレッド間で共有しないでください(代わりに、使用する前に常にローカルスコープでインスタンスを作成してください)。

第二に、ジャークソンで日付を自動的に使用するというよりトリッキーな問題。これは、Lift-jsonより劣るJerksonの機能の1つであるように見えます。後者では、カスタムパーサー/フォーマッターコードを解析レイヤーに挿入できます。ジャークソンはそうではないと思います。

この制限を無視するだけで回避できました。Jerksonの優れたパフォーマンスが気に入っているため、日付の送信にはLongとStringを使用し、解析は個別に処理します。例えば

case class JTest(val dTest: String) {
  lazy val dTestDate: Date = {
    val sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
    sdf.parse(dTest)
  }
}
于 2012-11-23T08:30:48.147 に答える