首页 > 解决方案 > 如何正确地将变量放入 url。改造 2.0

问题描述

我正在尝试以这种方式放置 id :

@Headers("Content-type: multipart/form-data")
@POST("/files/upload?dir=userIcons/{id}")
fun upload(@Query("id", encoded = true) id: String,
           @Body encodedImg: String) : Call<IconModel>

但是我在更换时遇到错误。并且知道如何解决它。

这是错误消息:

java.lang.IllegalArgumentException: URL query string "dir=userIcons/{id}" must not have replace block. For dynamic query parameters use @Query.

标签: androidkotlinretrofitretrofit2

解决方案


由于您不能在查询中使用替换块(无论您随后如何尝试替换它, using@Path也无法使用它),因此可以采用以下方法。您可以从传递给@POST注释的路径中删除查询部分:

@Headers("Content-type: multipart/form-data")
@POST("/files/upload")
fun upload(@Query("dir", encoded = true) id: String,
           @Body encodedImg: String): Call<IconModel>

然后你必须在调用 API 时传入查询参数的整个值:

val call = api.upload("userIcons/foo", "bar")

这将导致这样的调用,我相信这就是您想要的:

/files/upload?dir=userIcons/foo 

推荐阅读