2012-05-05 54 views
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]); 

我做错了什么? 这是一个播放框架的错误?

谢谢。

+0

你在哪里命名你的POST变量?如果你想得到它们,你必须将它们绑定到你的模型上。 –

+0

我假设绑定是通过匹配属性的名称自动完成的。所以我现在就试试。 – mcmorry

+0

它不起作用。我正在寻找文档(http://www.playframework.org/documentation/2.0/JavaForms),但即使使用HashMap的简单代码也不起作用。我总是返回空值。 我应该如何绑定它们?你可以发表一个例子吗? – mcmorry

回答