安卓Retrofit如何正确拼接查询字符串 实现含+号参数的原样传递
问题成因
Retrofit 默认会对 @Query 注解标注的查询参数执行标准 URI 编码,传入的 test+data 里的 + 会被自动转义为 %2B,这是框架的默认安全机制,和当前的 build.gradle 配置、Repository 层调用逻辑无关。
解决方案
- 无需修改 build.gradle 配置、Repository 层的现有调用逻辑,仅需调整 ApiService 接口的注解参数,关闭指定查询参数的自动转义
- 修改后的接口定义如下:
@GET("/?format=json") fun getAllData(@Query(value = "q", encode = false) q: String) : Call<User>
- 配置生效后,Retrofit 会将传入的
test+data原值直接拼接到请求查询参数中,不会对+做自动转码
注意事项:设置encode = false后,框架不会对参数值做任何特殊字符转义,需要确保传入的参数值本身符合后端接口的入参要求,避免其他特殊字符引发路径解析异常。
内容的提问来源于stack exchange,提问作者Chait
相关产品推荐
相关产品推荐

