我正在尝试从以下位置使用Uribuilder:
javax.ws.rs.core.UriBuilder;
更新URI。问题是当我使用replaceQueryParam时,参数名称被转义了。
所以:
UriBuilder uriBuilder = webResource.getUriBuilder().
replaceQueryParam("abcd!dcv, "wid").
replaceQueryParam("format", "json");
如果Uribuilder中已经存在一个“abcd!dcv”参数,它将转义并添加一个新参数。所以它将成为
?abcd!dcv=originalvalue&abcd%21cdv=wid
代替
?abcd!dcv=wid
我应该如何解决?谢谢!
最佳答案
URIBuilder
是一个抽象类,实现可以确定哪些字符需要特殊编码,哪些不需要特殊编码。我们从WebResource获得的URIBuilder
试图遵循RFC 3986的准则。在第12页上,! 被列为子定界符,这就是为什么要对其进行编码的原因。通过阅读RFC,我认为我们不应该使用!作为查询参数的一部分。例如,Vaading使用!区分同一应用程序的子窗口。
我能想到的最简单的解决方法是不使用URIBuilder或使用将String作为输入的fromURI方法。您可以使用除我们不想编码的字符以外的所有内容创建URI,将其转换为astring
,操纵astring
替换查询参数,然后调用URIBuilder.fromURI(aString)