Play20 で lift-json を使う
ドメインオブジェクトからJSONへのアンマーシャルがだるい - ikeike443のブログ
はい、だるいので、実は productFormatN というお手軽 Read/Write=Format 定義メソッドがあります
ドキュメントにまだ載ってないみたい。
使い方
ただ、ikeikeさんの例だと Userクラスが再帰的になっているためか、StackOverflow しました。。。
で、思ったのですが、Scala には Lift の遺産(死んでません) lift-json があるのです。
lift-json の使い型はこちら lift-json リファレンス - tototoshiの日記
いちいち Format 書く必要ないし、play.api.libs.json よりイケてますから、こっちを使いたい。
というわけで、Play20 で lift-json を使えるようにして、モジュール化しました。
tototoshi/lift-json-play-module · GitHub
設定
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings( resolvers += "tototoshi.github.com maven-repo/releases" at "http://tototoshi.github.com/maven-repo/releases", libraryDependencies ++= Seq( "com.github.tototoshi" %% "lift-json-play-module" % "0.1" ) )
mixin してお使いください。
import com.github.tototoshi.play2.json.LiftJson import net.liftweb.json._ case class Person(id: Long, name: String, age: Int) object Application extends Controller with LiftJson { implicit val formats = DefaultFormats def get = Action { implicit request => Ok(Extraction.decompose(Person(1, "ぱみゅぱみゅ", 19))) } def post = Action(liftJson) { implicit request => // request body が lift-json の JValue になる val jval = request.body val pamyu: Person = jval.extract[Person] Ok(pamyu.name) } }