Jsonを返却する その2

Play1.Xならcase classはすんなり返せていたのに、Play2.0だとちとメンドクサイ。
こちらを参考にしたが、うまく動かなかったので、
trait Protocolではなくobject Protocolにしたところ、動作できました。

・case classと変換クラス

package models

import play.api.libs.json._
import play.api.libs.json.Reads._
import play.api.libs.json.Writes._

case class ResultData(name:String,zip:String,age:Int)

object Protocol {
implicit object ResultDataFormat extends Format[ResultData] {
def reads(json: JsValue): ResultData = ResultData(
(json \ "name").as[String]
,(json \ "zip").as[String]
,(json \ "age").as[Int]
)

def writes(p: ResultData): JsValue = JsObject(List(
"name" -> JsString(p.name)
,"zip" -> JsString(p.zip)
,"age" -> JsNumber(p.age)
))
}
}

・呼び出し側

    import play.api.libs.json.Json._
import models.ResultData
import models.Protocol._
def sample3 = Action { implicit request =>
val obj = ResultData("hoge","123-4567",17)
Ok(toJson(obj))
}

・結果

{"name":"hoge","zip":"123-4567","age":17}