ソケット通信から同じPOSTデータを受信する必要があります。
これは、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のバグですか?
ありがとう。