このエントリはPlay frameworkひとりアドベントカレンダーの8日目です。
今日はGET/POSTで送信されたデータを受信してみます。 いずれの場合もJSONで送ったデータが返ってくるようにします。
formのバインディングとかあるみたいだけど、わからんちんなので使いません。
上級者が使えばよろしい。
レスポンス例
{"fuga":["fugo","fuge"],"hoge":"hoga"}
GETの場合はこのリクエストで正しいデータがくるようにします。
curl 'http://localhost:9000/push?hoge=hoga&fuga=fugo&fuga=fuge'
POSTの場合はこのリクエストで正しいデータがくるようにします。
curl --data 'hoge=hoga&fuga=fugo&fuga=fuge' 'http://localhost:9000/push'
GETの場合
Controller#request#queryString
で Map<String, String[]>
からデータを取得します。
POSTの場合
Controller#body#asFormUrlEncoded
で Map<String, String[]>
からデータを取得します。
サンプルコード
こんな感じ。相変わらず簡単。
/conf/routes
GET /push controllers.Application.getPush()
POST /push controllers.Application.postPush()
/app/controller/Application.java
package controllers;
import java.util.Map;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
public class Application extends Controller {
public static ObjectNode convert(Map data) {
ObjectNode json = Json.newObject();
for (String key : data.keySet()) {
if (data.get(key) == null || data.get(key).length == 0) {
continue;
} else if (data.get(key).length == 1) {
json.put(key, data.get(key)[0]);
} else {
ArrayNode child = json.putArray(key);
for (String value : data.get(key)) {
child.add(value);
}
}
}
return json;
}
public static Result getPush() {
Map queryStrings = request().queryString();
return ok(convert(queryStrings));
}
public static Result postPush() {
Map form = request().body().asFormUrlEncoded();
return ok(convert(form));
}
}