为什么Retrofit无法使用方括号正确编码查询字符串?

Noo*_*les 8 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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,查询字符串由一些不同类型的参数组成,因此我决定@QueryMap在Retrofit Interface中使用注释,Map<String, String>其中where q, param[1], param[0], other_param是地图的String键

我期待什么?我希望URL中的方括号用%5Bfor '['%5Dfor 编码'[',但这不会发生.

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

Jak*_*ton 14

查询名称从不进行URL编码.

@QueryMap各州的文件:

值是URL编码的.

并为@EncodedQueryMap:

值不是URL编码的.

但是,我刚刚提交了一个pull请求来改变这种行为.我正在使用@Query(value = "..", encodeName = true)或添加对密钥编码的支持@QueryMap(encodeNames = true).