2
我需要从套接字通信接收相同的POST数据。Play框架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;
}
表单对象接收数据,因为我可以se Ë他们在调试,而是由get()方法返回的ADR对象仅包含空值:
adr = {
t: null,
u: null
}
相反,如果我用这个代码读取的数据是否能够正常工作:
Map<String, String[]> asFormUrlEncoded = request().body().asFormUrlEncoded();
return ok(asFormUrlEncoded.get("t")[0] + " - " + asFormUrlEncoded.get("u")[0]);
我做错了什么? 这是一个播放框架的错误?
谢谢。
你在哪里命名你的POST变量?如果你想得到它们,你必须将它们绑定到你的模型上。 –
我假设绑定是通过匹配属性的名称自动完成的。所以我现在就试试。 – mcmorry
它不起作用。我正在寻找文档(http://www.playframework.org/documentation/2.0/JavaForms),但即使使用HashMap的简单代码也不起作用。我总是返回空值。 我应该如何绑定它们?你可以发表一个例子吗? – mcmorry