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