Java URI Builder 构建方法替换“?”路径中的字符
Java URI Builder build method replacing "?" character in the path
我在以下路径有一个 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编码将字符转换成可以在互联网上传输的格式。
URLs 只能使用 ASCII 字符集通过 Internet 发送。
由于 URL 经常包含 ASCII 集之外的字符,因此必须将 URL 转换为有效的 ASCII 格式。
URL 编码将不安全的 ASCII 字符替换为“%”后跟两个十六进制数字。
URLs 不能包含 spaces。 URL 编码通常用加号 (+) 或 %20 替换 space。
我在以下路径有一个 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编码将字符转换成可以在互联网上传输的格式。
URLs 只能使用 ASCII 字符集通过 Internet 发送。
由于 URL 经常包含 ASCII 集之外的字符,因此必须将 URL 转换为有效的 ASCII 格式。
URL 编码将不安全的 ASCII 字符替换为“%”后跟两个十六进制数字。
URLs 不能包含 spaces。 URL 编码通常用加号 (+) 或 %20 替换 space。