微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java URI Builder 构建方法替换“?”路径中的字符

如何解决Java URI Builder 构建方法替换“?”路径中的字符

我在以下路径有一个 API

/v0/segments/ch/abc/view/status/ACTIVE?sc=%s&expiryGteInMs=%d

我正在使用 Java 中的 URIBuilder 构建客户端。

return UriBuilder
      .fromUri(config.getHost())
      .path(String.format(config.getPath(),request.List(),request.getTime()))
      .build();

该请求包含要代替 %s 的列表和要代替 %d 的时间。但是正在形成的请求有这样的路径

/v0/segments/ch/abc/view/status/ACTIVE%3Fsc=FK,GR&expiryGteInMs=1611081000000

基本上是“?”字符被 %3F 替换。有人可以帮我吗?

P.S:我知道我们可以使用 URIBuilder 中可用的“.queryParam”选项。寻找发生这种情况的真正原因?

解决方法

您使用的最有可能的库是编码 url,而 ? 编码为 %3F。 为什么会发生这种情况(简而言之):url 只能包含一组特定的字符,而 ? 不是其中之一,因此,为了传输此字符,我们应该对其进行编码(所谓的 Percent-encoding ).

更长的解释(取自here):

URL 编码将字符转换为可以通过 Internet 传输的格式。

URL 只能使用 ASCII 字符集通过 Internet 发送。

由于 URL 通常包含 ASCII 集之外的字符,因此必须将 URL 转换为有效的 ASCII 格式。

URL 编码将不安全的 ASCII 字符替换为“%”后跟两个十六进制数字。

网址不能包含空格。 URL 编码通常用加号 (+) 或 %20 替换空格。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。