java - 带有感叹号的 Uribuilder 编码

标签 java jax-rs url-encoding

我正在尝试使用 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 或使用将字符串作为输入的 fromURI 方法。您可以使用除我们不想编码的字符部分以外的所有内容创建 URI,将其转换为 astring,操作 astring 以替换查询参数,然后调用 URIBuilder.fromURI(aString)

关于java - 带有感叹号的 Uribuilder 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924219/

相关文章:

javascript - Spring mvc 加载 JS 时出现 Uncaught SyntaxError : Unexpected token <

java - 如何正确使用FileUtils IO?

python - 如何防止 Scrapy 对请求 URL 进行 URL 编码

java - JAX-RS 2.0 客户端 - 使用 RESTEasy 客户端发送多部分消息

android - Retrofit + GET 方法 + Android 中的 www-form-urlencoded

python - 如何使请求不解码我的网址中的转义百分比?

java - 我可以在小程序中使用 PDFBox 吗?

java - 使用 Java 枚举

jax-rs - 如何在 Quarkus 中处理大文件上传

apache - 从 apache cxf REST 响应中删除空值字段