我有一个 Play Framework 应用程序 (2.2.1),它必须发回 x-www-form-urlencoded 数据。我的 Controller 操作使用 request().body().asFormUrlEncoded()
恢复数据返回 Map<String, String[]>
.
在我的行动中,我必须以这种方式发回这些数据:WS.url(url).setContentType("application/x-www-form-urlencoded").post(data)
(之前,我处理 URL 上的操作)。问题是 post()
接受 String
, File
, 和其他人,但不是 Map
由 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();
}
还有其他(更简单)的方法吗? Map
的值由 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()));
关于java - Play Framework/Java : A good way to send x-www-form-urlencoded data back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063435/