编译与感叹号的Uribuilder

时间:2014-07-24 02:37:17

标签: java jax-rs url-encoding

我试图使用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

我该如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

URIBuilder是一个抽象类,实现可以决定哪些字符需要特殊编码,哪些不需要。我们从WebResource获得的URIBuilder正在尝试遵循RFC 3986的指导原则。在第12页上,被列为子分隔符,这就是它被编码的原因。从我阅读RFC开始,我认为我们不应该使用它!作为查询参数的一部分。例如,Vaading使用!区分同一应用程序的子窗口。

我能想到的最简单的工作就是不使用URIBuilder或使用带有String作为输入的fromURI方法。您可以使用包含我们不想要编码的字符的部分创建URI,将其转换为astring,操纵astring以替换查询参数,然后调用URIBuilder.fromURI(aString)