我在 Android 应用程序中对网络层使用 Retrofit,但 URL 编码存在问题。
我必须像这样调用 REST API:
https://my_hostname.com/some_path?q=some_query¶m[0]=value1¶m[1]=value2&other_param=abcd
正如你所看到的,查询字符串是由一些不同类型的参数组成的,所以我决定使用@QueryMap
Retrofit Interface 中的注释Map<String, String>
where
q, param[1], param[0], other_param
是地图的字符串键
我期待什么?
我希望 URL 中的方括号编码为%5B
for '['
and %5D
for '['
,但这不会发生。
为什么会发生这种情况?方括号应使用百分比编码。这是一个错误还是我做错了什么?我也尝试过@EncodedQueryMap
注释没有区别。
查询名称永远不会进行 URL 编码。
的文档@QueryMap
states:
值是 URL 编码的。
And for @EncodedQueryMap
:
值未经过 URL 编码。
然而,我只是提交了拉取请求 https://github.com/square/retrofit/pull/620稍微改变一下这种行为。我通过使用添加对编码键的支持@Query(value = "..", encodeName = true)
or @QueryMap(encodeNames = true)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)