java – 在Jersey Client 2中编码花括号
作者:互联网
我们正在使用Jersey Client 2.21.我注意到当我们将花括号(又名花括号)作为参数值时,它不会被正确编码.不仅如此,花括号内的任何内容都不会被编码.对于我测试过的常规括号或其他不安全字符,情况并非如此.
请参阅下面的示例.在这个例子中,我输入三个参数.一个只有空格的控制参数.一个用花括号,一个用常规括号.
public static void testJerseyEncoding() {
Client client = ClientBuilder.newClient();
String url = "http://foo.com/path";
Map<String, String> map = new HashMap<>();
map.put("paramWithCurly", " {with a space}");
map.put("paramWithOutCurly", "with a space");
map.put("paramWithBracket", "[with a space]");
WebTarget target = client.target(url);
for (Map.Entry<String, String> entry : map.entrySet()) {
target = target.queryParam(entry.getKey(), entry.getValue());
}
System.out.println(target.toString());
}
这是输出:
JerseyWebTarget { http://foo.com/path?paramWithBracket=%5Bwith+a+space%5D¶mWithOutCurly=with+a+space¶mWithCurly=+{with a space} }
泽西客户端有什么问题,或者我错过了什么?花括号应编码为“{”.
解决方法:
当您使用卷曲值创建参数时,Jersey认为您要使用URL参数.见https://jersey.github.io/documentation/latest/uris-and-links.html.
UriBuilder.fromUri("http://localhost/")
.path("{a}")
.queryParam("name", "{value}")
.build("segment", "value");
因此,您应该通过URLEncoder编码花括号,可能如下所述:How to force URIBuilder.path(…) to encode parameters like “%AD”? This method doesn’t always encode parameters with percentage, correctly.
标签:url-encoding,java,jersey-2-0,jersey-client,urlencode 来源: https://codeday.me/bug/20190724/1525716.html