• このエントリーをはてなブックマークに追加

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()

2. 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);
			}
		}		
	}

3. URL アクセス

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

Jsonデータを返す方法

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

GET     /test/jsonresp              controllers.MyJsonSample.sayHello()

2. 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);
	}

3. URL アクセス

 curl  http://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);
			}
		}		
	}	
}