Play Framework 2.1でJSONをレスポンスとして返す実装を書こうとしたのですが、今日2013-05-22時点ではJerksonがScala 2.10に対応していません(Pull Requestは出ている)。
代替手段として、Jackson Scala Moduleを使うことにしました。
ライブラリの追加は下記の通り。
Build.scala
val appDependencies = Seq(
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.1.3"
)
準備は以下のとおり。
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
DefaultScalaModuleというのが、Scalaがサポートしている型をJSONに変換するためのモジュールだそうです。
あとはJSONに変換したいScalaのインスタンスを渡してあげればOKです。今回はStringに変換する例です。
//インスタンスobjをJSONに変換したStringに変換
val json: String = mapper.writeValueAsString(obj)
Case classを渡してあげると、引数の名前がJSONのキーになります。
case class DataPoint(title: String, value: String)
val obj = DataPoint("test", "abc")
のようなcase classがあったときのobjのJSON変換結果は
JSON
{"test":"abc"}
のようになります。
オブジェクトへのマッピング(デシリアライズ)にも、もちろん対応しています。ですが私はまだ触ったことがありません。また機会を見つけて調査してみます。