java - 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 替换。有人可以帮我解决这个问题吗?
PS:我知道我们可以使用 URIBuilder 中可用的“.queryParam”选项。寻找发生这种情况的实际原因?
解决方案
您正在使用的最有可能的库是编码 url,并?
编码为%3F
. 为什么会发生这种情况(简而言之): url 只能包含特定的字符集,并且?
不是其中之一,因此,为了传输这个字符,我们应该对其进行编码(所谓的 Percent-encoding)。
更长一点的解释(取自这里):
URL 编码将字符转换为可以通过 Internet 传输的格式。
URL 只能使用 ASCII 字符集通过 Internet 发送。
由于 URL 通常包含 ASCII 集之外的字符,因此必须将 URL 转换为有效的 ASCII 格式。
URL 编码将不安全的 ASCII 字符替换为“%”,后跟两个十六进制数字。
URL 不能包含空格。URL 编码通常用加号 (+) 或 %20 替换空格。
推荐阅读
- c# - Automapper 展开到列表
- node.js - 猫鼬在提取信息的同时更新数百万条记录
- javascript - 当为 localstorage 添加 location.reload 以外的数据时,如何将其打印出来?
- html - 将分享问题链接到 Facebook 和 Linkedin?
- sqlite - SQLiteOpenHelper AndroidStudio 的 writableData 问题 - Kotlin
- javascript - 将页面重定向到 fb
- swift - CoreBluetooth 看不到外围设备名称
- mysql - MySQL 未执行外键约束。编辑:用“其他”替换“模式”
- highcharts - Highcharts:堆积条形图 -> 如何改变颜色?
- django - DRF ModelSerializer 比标准 Serializer 快还是慢?