java - Play Framework/Java : A good way to send x-www-form-urlencoded data back

标签 java http playframework playframework-2.0

我有一个 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 , 和其他人,但不是 MapasFormUrlEncoded() 返回.这有点烦人。

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

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/

相关文章:

http - Nginx (1.2.7) 将 HTTP 重定向到 HTTPS

c - http 服务器响应(套接字)的 header 和内容之间存在差异

json - Play 框架 (Scala) - 获取包含数组的 json 子集

java - 缓冲阅读器 - 删除标点符号

HTTP 1.1 请求行

java反编译器,在intellij-idea的实际物理位置保存行号

java - 为什么在单独的线程池中将阻塞操作与非阻塞操作分开是一个更好的主意,而不是在一个线程池中执行所有操作?

scala - 有人使用securesocial实现了死锁或任何其他授权机制吗?

java - 使用 readline 时 BufferedReader 不解析 ascii 控制字符

java - 为什么我的 anchor 标记在我指定的路径之前包含我的请求上下文路径?