ソケット通信から同じPOSTデータを受け取る必要があります。Play framework 2.0 Form.bindFromRequest()。get()は空のモデルを返します
これは、POSTを送信し、応答を受信したコードであり、正しく動作するようです:
String data = "t=" + URLEncoder.encode("Title", "UTF-8") +
"&u=" + URLEncoder.encode("http://www.myurl.com", "UTF-8");
URL url = new URL("http://localhost:9000/adserver");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String output = "Data received\r\n", line;
while ((line = rd.readLine()) != null) {
output += line;
}
wr.close();
rd.close();
return ok(output);
これは、POSTを受け取るコードです:
Form<AdRequest> form = form(AdRequest.class).bindFromRequest();
if(form.hasErrors()) {
return badRequest("error");
} else {
AdRequest adr = form.get();
return ok(adr.t + " - " + adr.u);
}
AdRequestモデルがあります次のように定義されています:
public class AdRequest {
public String t;
public String u;
}
フォームオブジェクトはデータを受け取りますデバッグでそれらを電子が、get()メソッドによって返されたADRオブジェクトはnull値が含まれています
adr = {
t: null,
u: null
}
私はデータを読み取るために、このコードを使用する場合代わりに、それが正常に動作します:
Map<String, String[]> asFormUrlEncoded = request().body().asFormUrlEncoded();
return ok(asFormUrlEncoded.get("t")[0] + " - " + asFormUrlEncoded.get("u")[0]);
私は間違っているの? Play Frameworkのバグですか?
ありがとうございました。
あなたのPOST変数の名前はどこですか?それらを取得したい場合は、それらをモデルにバインドする必要があります。 –
私はバインディングがプロパティの名前を照合することによって自動的に行われると仮定していました。だから私は今試してみる。 – mcmorry
動作しません。私はドキュメント(http://www.playframework.org/documentation/2.0/JavaForms)を探していますが、HashMapを使用する単純なコードでさえ機能しません。私はいつもヌル値を返します。 どうしたらいいですか?あなたは例を投稿できますか? – mcmorry