java - 为什么 Retrofit 不能用方括号正确编码查询字符串?

标签 java android urlencode retrofit

我在我的 Android 应用程序中为我的网络层使用 Retrofit,但我遇到了 URL 编码问题。

我必须这样调用 REST API:

https://my_hostname.com/some_path?q=some_query&param[0]=value1&param[1]=value2&other_param=abcd

如您所见,查询字符串由一些不同类型的参数组成,所以我决定使用 @QueryMap带有 Map<String, String> 的 Retrofit 界面中的注释在哪里 q, param[1], param[0], other_param是 map 的字符串键

我期望什么? 我希望 URL 中的方括号用 %5B 编码对于 '['%5D对于 '[' ,但这不会发生。

为什么会这样?方括号应使用百分比编码进行编码。这是一个错误还是我做错了什么?我也试过 @EncodedQueryMap注释没有差异。

最佳答案

查询名称从不经过 URL 编码。

@QueryMap 的文档指出:

Values are URL encoded.

对于@EncodedQueryMap:

Values are not URL encoded.

然而,我只是submitted a pull request稍微改变一下这种行为。我正在使用 @Query(value = ".., encodeName = true)@QueryMap(encodeNames = true) 添加对编码键的支持。

关于java - 为什么 Retrofit 不能用方括号正确编码查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129697/

相关文章:

带有 Ubuntu 12.04 Panics 的 Android SDK

Android Webview 没有实现 CSS

HTTP查询和URI编码疑惑

html - 链接带有重音符号的文件夹中的 .avi 文件时出错

java - 通过 Jackson 的 ZonedDateTime 往返产生不相等的 ZonedDateTime

Java 拒绝 ssl 证书,但 Firefox 接受它

java - 为什么 RandomAccessFile writeLong 是通过多次写入调用实现的?

java - Java 可以对一般范围内测试使用无符号比较吗?

android - 为什么 java.net.UnknownHostException : Host is unresolved: webservername. com :80?

javascript - 如何使 HTML 或 URL 与手机兼容