我需要从套接字通信接收相同的 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 对象只包含空值:
adr = {
t: null,
u: null
}
相反,如果我使用此代码读取数据,它可以正常工作:
Map<String, String[]> asFormUrlEncoded = request().body().asFormUrlEncoded();
return ok(asFormUrlEncoded.get("t")[0] + " - " + asFormUrlEncoded.get("u")[0]);
我做错了什么?是 Play 框架的错误吗?
谢谢。