这是 UriBuilder 的预期行为吗?

发布于 2024-12-29 09:42:03 字数 439 浏览 0 评论 0原文

这就是我正在做的事情(JAX-RS 1.0,Jersey 1.11):

import javax.ws.rs.core.UriBuilder;
System.out.println(UriBuilder.fromPath("/").queryParam("x", "%40").build());
System.out.println(UriBuilder.fromPath("/").queryParam("x", "100%").build());

预期:

/?x=%2540
/?x=100%25

但实际输出是:

/?x=%40
/?x=100%25

发生了什么?如果这是 UriBuilder 的行为方式,那么解决方法是什么?

This is what I'm doing (JAX-RS 1.0, Jersey 1.11):

import javax.ws.rs.core.UriBuilder;
System.out.println(UriBuilder.fromPath("/").queryParam("x", "%40").build());
System.out.println(UriBuilder.fromPath("/").queryParam("x", "100%").build());

Expected:

/?x=%2540
/?x=100%25

But actual output is:

/?x=%40
/?x=100%25

What is going on? What is a workaround if this is how UriBuilder should behave?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暮年慕年 2025-01-05 09:42:03

我很惊讶,但这就是它的工作原理:

UriBuilder.fromUri("/").queryParam("x", "{value}").build(/* any text */);

I'm surprised, but this is how it works:

UriBuilder.fromUri("/").queryParam("x", "{value}").build(/* any text */);
昨迟人 2025-01-05 09:42:03

问题可能是有一种额外的方法可以从编码字符串构建 URI:

来自 Javadocs:
build(): “字符串化值中的所有 '%' 字符都将被编码。构建器的状态不受影响”

buildFromEncoded(): “字符串化值中的所有 % 字符 将被编码后面不跟两个十六进制数字的将被编码。”

URIBuilder.buildFromEncoded():
http://jsr311.java.net/nonav/javadoc/javax/ws/rs/core/UriBuilder.html#buildFromEncoded%28java.lang.Object...%29

希望有帮助

The problem might be that there is an extra method for building URIs from encoded Strings:

From the Javadocs:
build(): "All '%' characters in the stringified values will be encoded. The state of the builder is unaffected"

buildFromEncoded(): "All % characters in the stringified values that are not followed by two hexadecimal numbers will be encoded."

URIBuilder.buildFromEncoded():
http://jsr311.java.net/nonav/javadoc/javax/ws/rs/core/UriBuilder.html#buildFromEncoded%28java.lang.Object...%29?

hope that helped

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文