Play Framework/Java:返回x-www-form-Url编码数据的好方法

Play Framework/Java:返回x-www-form-Url编码数据的好方法,java,http,playframework,playframework-2.0,Java,Http,Playframework,Playframework 2.0,我有一个Play Framework应用程序(2.2.1),它必须将x-www-form-urlencoded数据发送回。我的控制器操作使用返回映射的请求().body().asFormUrlEncoded()恢复数据 在我的操作中,我必须以这种方式发送此数据:WS.url(url).setContentType(“application/x-www-form-urlencoded”).post(data)(之前,我处理url上的操作)。问题是post()接受String、File等,但不接受a

我有一个Play Framework应用程序(2.2.1),它必须将x-www-form-urlencoded数据发送回。我的控制器操作使用返回映射的
请求().body().asFormUrlEncoded()
恢复数据

在我的操作中,我必须以这种方式发送此数据:
WS.url(url).setContentType(“application/x-www-form-urlencoded”).post(data)
(之前,我处理url上的操作)。问题是
post()
接受
String
File
等,但不接受
asFormUrlEncoded()
返回的
映射。有点烦人

我必须以这种方式重建数据:

final Map<String, String[]> body = request().body().asFormUrlEncoded();
StringBuffer postBodyProv = new StringBuffer("");
Set<String> keys = body.keySet();
String result = null;
try {
    for (String key : keys) {
        postBodyProv.append(URLEncoder.encode(key, "UTF-8") + "=");
        String value = body.get(key)[0];
        postBodyProv.append(URLEncoder.encode(value, "UTF-8"));
        postBodyProv.append("&");
    }
    result = postBodyProv.substring(0, postBodyProv.length() - 1); // To skip the last "&"
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
final Map body=request().body().asFormUrlEncoded();
StringBuffer postBodyProv=新的StringBuffer(“”);
Set keys=body.keySet();
字符串结果=null;
试一试{
用于(字符串键:键){
postBodyProv.append(URLEncoder.encode(键,“UTF-8”)+“=”);
字符串值=body.get(key)[0];
postBodyProv.append(urlcoder.encode(值,“UTF-8”);
postBodyProv.追加(“&”);
}
result=postBodyProv.substring(0,postBodyProv.length()-1);//跳过最后一个“&”
}捕获(不支持的编码异常e){
e、 printStackTrace();
}

还有其他(更简单的)方法吗?
asFormUrlEncoded()
返回的
Map
值是字符串数组,数组中是否有多个元素?在本例中,它们是如何分离的?

为什么不尝试将映射转换为JsonNode(在post()方法中有效)。我还将使用DynamicForm:

final DynamicForm f = form().bindFromRequest();
WS.url(url).setContentType("application/x-www-form-urlencoded").
    post(play.libs.Json.toJson(f.data()));