Jsonを返却する その2
Play1.Xならcase classはすんなり返せていたのに、Play2.0だとちとメンドクサイ。
こちらを参考にしたが、うまく動かなかったので、
trait Protocolではなくobject Protocolにしたところ、動作できました。
・case classと変換クラス
package modelsimport 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}