【问题标题】:How to send request body in get method retrofit如何在 get 方法改造中发送请求正文
【发布时间】:2019-09-20 09:58:53
【问题描述】:

我正在使用改造库进行网络调用。在此,我需要在 GET 方法中传递 Body。但是当我通过这个错误时,我得到了错误。在 Postman 中,它在为 GET 方法传递 Body 时工作。

@GET("http://192.168.0.141:3000/api/contacts/{page_num}/{limit}")
fun getAllContacts(@Path("page_num") page_num:Int,@Path("limit") limit:Int,@Body reqBody:ContactsInpRequest):Call<AllContactsDataResponse>

我通过传递 body 来调用 get 方法。但我得到了以下异常。

java.lang.IllegalArgumentException:非正文 HTTP 方法不能包含 @Body。

【问题讨论】:

标签: android retrofit


【解决方案1】:

GET 方法不像 POST 那样包含正文。在这里您可以了解有关 REST 方法的更多信息:https://restfulapi.net/http-methods/

编辑:我看到你说它在 Postman 中工作,所以看看这个:

*CAN GET 请求有正文吗?

换句话说,任何 HTTP 请求消息都可以包含消息体,因此必须在解析消息时考虑到这一点。但是,GET 的服务器语义受到限制,因此主体(如果有)对请求没有语义意义。 ...是的,您可以使用 GET 发送请求正文,但它应该没有任何意义。*

【讨论】:

    【解决方案2】:
    java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body
    

    这意味着你的@GET 或@DELETE 不应该有@Body 参数。您可以使用查询类型 url 或路径类型 url 或 Query Map 来满足您的需要。否则你可以使用其他方法注解。

    【讨论】:

    • 但是当我在邮递员的 GET 方法中传递正文时,它工作正常。
    • 是的,邮递员更新了这一点,但您不应该通过获取请求发布正文,而是将您的方法更改为发布。
    【解决方案3】:
       @Headers("Content-Type: application/json")
    @GET("helper-url")
    fun getHelperUrl(
        @Query("api_token") apiToken: String,
        @Query("authtype") authType: String,
        @Query("channel") channel: String
    ): Call<ResponseHelperUrl>
    

    【讨论】:

      猜你喜欢
      • 2020-04-25
      • 2018-10-18
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      相关资源
      最近更新 更多