Play Frameworkの JSONを扱う方法についてのメモです.

  • JSONデータを受け取る方法
  • JSONデータを返す方法

やること

以下の3ステップ.

  1. conf/routesでエントリポイントを定義
  2. app/controllersに コントローラ追加
  3. URL アクセス

Environment

  • Play 2.4.2

Jsonデータを受け取る方法

  1. conf/routesでエントリポイントを定義

POST    /test/jsonreq               controllers.MyJsonSample.sayHello2()
  1. app/controllersに コントローラ追加

name を受け取って、Hello をつけて返す.

public Result sayHello2() {
    JsonNode json = request().body().asJson();
    if(json == null) {
        return badRequest("Expecting Json data");
    } else {
        String name = json.findPath("name").textValue();
        if(name == null) {
            return badRequest("Missing parameter [name]");
        } else {
            return ok("Hello " + name);
        }
    }       
}   
  1. URL アクセス

curl -H "Content-Type: application/json" -d '{"name":"tsu-nera"}' https://localhost:9000/test/jsonreq

Jsonデータを返す方法

  1. conf/routesでエントリポイントを定義

GET     /test/jsonresp              controllers.MyJsonSample.sayHello()
  1. app/controllersに コントローラ追加

テストした構造は、ObjectNodeの中にObjectNodeを渡す.

public Result sayHello() {
    ObjectNode result = Json.newObject();
    result.put("exampleField1", "Hello world!");
    result.put("name", "tsu-nera");

    ObjectNode result2 = Json.newObject();
    result2.put("subField1", "foo");
    result2.put("subField2", "bar");
    result.put("exampleField3", result2);

    return ok(result);
}   
  1. URL アクセス

 curl  https://localhost:9000/test/jsonresp

{"exampleField1":"Hello world!","name":"tsu-nera","exampleField3":{"subField1":"foo","subField2":"bar"}}

Code

package controllers;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import play.*;
import play.mvc.*;

import play.libs.Json;

public class MyJsonSample extends Controller {

    public Result index() {
        return ok();
    }

    public Result sayHello() {
        ObjectNode result = Json.newObject();
        result.put("exampleField1", "Hello world!");
        result.put("name", "tsu-nera");

        ObjectNode result2 = Json.newObject();
        result2.put("subField1", "foo");
        result2.put("subField2", "bar");
        result.put("exampleField3", result2);

        return ok(result);
    }   

    public Result sayHello2() {
        JsonNode json = request().body().asJson();
        if(json == null) {
            return badRequest("Expecting Json data");
        } else {
            String name = json.findPath("name").textValue();
            if(name == null) {
                return badRequest("Missing parameter [name]");
            } else {
                return ok("Hello " + name);
            }
        }       
    }   
}