【问题标题】:How to setup the static end of the url in retrofit call如何在改造调用中设置 url 的静态结尾
【发布时间】:2021-12-11 02:30:30
【问题描述】:

我有一个改造的api接口,但是如何根据参数正确设置它

@GET("/users/profile/{User}?age={Age}&api_key=randomkey")
suspend fun enableVoice(
        @Path("User") user: String?,
        @Query("age") age: String?
): Response<UserResponse?>

我收到此错误,不知道如何正确设置 api 端

java.lang.IllegalArgumentException: URL query string "age={Age}&amp;api_key=randomkey" must not have replace block. For dynamic query parameters use @Query.

请告诉我如何让它运行

【问题讨论】:

    标签: android kotlin retrofit retrofit2


    【解决方案1】:

    根据this answer,我认为您需要这样做:

    @GET("/users/profile/{User}")
    suspend fun enableVoice(
            @Path("User") user: String?,
            @Query("age") age: String?,
            @Query("api_key") key: String?,
    ): Response<UserResponse?>
    

    也可以使用@QueryMap,您可以在其中提供键值对的映射。

    @GET("/users/profile/{User}")
    suspend fun enableVoice(
            @Path("User") user: String?,
            @QueryMap queryParams: Map<String, String>
    ): Response<UserResponse?>
    

    【讨论】:

      【解决方案2】:

      您无需在 URL 中显式添加查询部分。使用 @Query 注释在方法中传递它会自动将其添加到请求的最终 URL 中。所以你的要求应该是

      @GET("/users/profile/{User}")
        suspend fun enableVoice(
          @Path("User") user: String?,
          @Query("age") age: String?,
          @Query("api_key") key: String?
        ): Response<UserResponse?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多