我在我的 Android 应用程序中为我的网络层使用 Retrofit,但我遇到了 URL 编码问题。
我必须这样调用 REST API:
https://my_hostname.com/some_path?q=some_query¶m[0]=value1¶m[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/