Play Frameworkの JSONを扱う方法についてのメモです.
- JSONデータを受け取る方法
- JSONデータを返す方法
やること
以下の3ステップ.
- conf/routesでエントリポイントを定義
- app/controllersに コントローラ追加
- URL アクセス
Environment
- Play 2.4.2
Jsonデータを受け取る方法
- conf/routesでエントリポイントを定義
POST /test/jsonreq controllers.MyJsonSample.sayHello2()
- 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);
}
}
}
- URL アクセス
curl -H "Content-Type: application/json" -d '{"name":"tsu-nera"}' https://localhost:9000/test/jsonreq
Jsonデータを返す方法
- conf/routesでエントリポイントを定義
GET /test/jsonresp controllers.MyJsonSample.sayHello()
- 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);
}
- 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);
}
}
}
}