Play frameworkでGET/POSTでデータを受け取る

シェアする

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

このエントリは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#queryStringMap<String, String[]> からデータを取得します。

POSTの場合

Controller#body#asFormUrlEncodedMap<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<String, String[]> 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<String, String[]> queryStrings = request().queryString();
		return ok(convert(queryStrings));
	}
 
	public static Result postPush() {
		Map<String, String[]> form = request().body().asFormUrlEncoded();
		return ok(convert(form));
	}
 
}
ads

シェアする

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

フォローする

ads

コメント

  1. […] 5. Play frameworkでGET/POSTでデータを受け取る […]