如何在get方法改进中发送请求正文

时间:2019-09-20 09:58:53

标签: android retrofit

我正在使用改造库进行网络通话。在这种情况下,我需要在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>

我通过传递正文来调用get方法。但是我遇到了以下异常。

  

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

3 个答案:

答案 0 :(得分:4)

GET方法不包含POST所包含的主体。在这里,您可以了解有关REST方法的更多信息:https://restfulapi.net/http-methods/

编辑:我看到您说它在邮递员中有效,因此请看一下:

*可以获取请求的正文吗?

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

答案 1 :(得分:2)

java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body

这意味着您的@GET或@DELETE不应具有@Body参数。您可以使用查询类型url或路径类型url或查询映射来满足您的需求。否则,您可以使用其他方法注释。

答案 2 :(得分:0)

   @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>