Play FrameworkでJSONを触ってみる

POSTリクエストとしてJsonを受け取り,そのJsonをencodeしたりdecodeしたりしてみた

conf/routesを変更

POST    /json                       controllers.JSONController.jsonParse 

コントローラーの記述

package controllers

import javax.inject.Inject

import play.api.mvc.{Action, Controller}

import play.api.libs.json._

// caseクラスを定義
case class Person(username: String, password: String)
// コンパニオンオブジェクトを定義
object Person {
  implicit def jsonWrites = Json.writes[Person]
  implicit def jsonReads = Json.reads[Person]
}

/**
  * Created by mituba on 2017/06/30.
  */
class JSONController @Inject() extends Controller {
  def jsonParse = Action { request =>
    // getRequestJson
    val params : Option[JsValue] = request.body.asJson
    val json = params.get

    // encode
    val result: JsResult[Person] = json.validate[Person]
    val person: Person = result.get
    println(person.username + " " + person.password)

    // decode
    val decodeJson: JsValue = Json.toJson(person)
    println(decodeJson.toString())

    Ok(decodeJson.toString())
  }
}

curlでPOSTする

curl -H "Content-Type: application/json" -X POST -d '{"username":"xyz","password":"xyz"}' http://localhost:9000/json

無事Jsonを受け取って,encode,decodeできました.

参考

以下のサイトを参考にしてもらいました.

qiita.com