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