我在 play 框架 2.3.3 中调用 WS.url() 时遇到问题,其中 url 包含空格。所有其他字符均自动进行 url 编码,但空格除外。当我尝试将所有空格更改为“%20”时,WS 由于“%”字符而将其转换为“%2520”。对于空格,我得到了 java.net.URISyntaxException: 查询中的非法字符。我该如何处理这个问题?
URL 查询字符串的一部分:
&input=/mnt/mp3/music/folder/01 - 23.mp3
代码如下所示:
Promise<JsonNode> jsonPromise = WS.url(url).setAuth("", "cube", WSAuthScheme.BASIC).get().map(
new Function<WSResponse, JsonNode>() {
public JsonNode apply(WSResponse response) {
System.out.println(response.getBody());
JsonNode json = response.asJson();
return json;
}
}
);
您应该根据 java.net.URL(Play! 用于其 WS)的方式“构建”您的 URL。 WS.url() 遵循相同的逻辑。
仅建议对表单数据使用 URLEncoder/Decoder。
来自 JavaDoc:
“注意,java.net.URI 类确实执行其组件的转义
特定情况下的字段。推荐的管理方式
URL的编码和解码是使用java.net.URI,并将
在这两个类之间使用 toURI() 和 URI.toURL()。这
也可以使用 URLEncoder 和 URLDecoder 类,但仅限于 HTML
form编码,与定义的编码方案不一样
在 RFC2396 中。”
所以,解决方案是使用THIS:
WS.url(baseURL).setQueryString(yourQueryString);
Where:
-
baseURL
是你的方案+主机+路径等。
-
yourQueryString
是......好吧,你的查询字符串,但是WITHOUT the ?
:输入=/mnt/mp3/音乐/文件夹/01 - 23.mp3
或者,如果您想使用更灵活的编程方法,THIS:
WS.url(baseURL).setQueryParameter(param, value);
Where:
-
param
是查询字符串中参数的名称
-
value
是参数的值
如果您想要在查询中包含多个参数值,则需要通过添加另一个参数来链接它们.setQueryParameter(...)
。这意味着这种方法不太适合复杂的多参数查询字符串。
Cheers!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)