我需要使用Retrofit执行DELETE请求。所以,我的界面代码片段如下所示:
@DELETE("/api/item/{id}")
void deleteItem(@Path("id") int itemId);
但我收到错误:
java.lang.IllegalArgumentException:ApiItem.deleteItem:必须有 返回类型或Callback作为最后一个参数。
但是,根据Rest API的规则,我不应该收到对DELETE请求的任何响应。我该如何在界面中指定它?
感谢。
答案 0 :(得分:28)
如果你想拥有void方法,你必须在请求方法中添加Callback 作为最后一个参数。您可以使用Callback<Response>
。
你必须改变这个:
@DELETE("/api/item/{id}")
void deleteItem(@Path("id") int itemId);
到:
@DELETE("/api/item/{id}")
void deleteItem(@Path("id") int itemId, Callback<Response> callback);
或者您只需返回Response
@DELETE("/api/item/{id}")
Response deleteItem(@Path("id") int itemId);
答案 1 :(得分:4)
在Retrofit 2.0中,您可以使用Call接口获取请求的结果,如下所示。
@DELETE("/api/item/{id}")
Call<Response> deleteItem(@Path("id") int itemId);
...
Call<Response> call = YourServiceInstance.deleteItem(10);
call.enqueue(new Callback<Response>() {
...
});
答案 2 :(得分:1)
@FormUrlEncoded
@HTTP(method = "DELETE", path = "manage-feed", hasBody = true)
Call<ResponseBody> deletePost(@Field("post_id") Integer postId, @Field("share_id") Integer sharedMapId);
答案 3 :(得分:0)
@HTTP(method = "DELETE", path = "/api/item/{id}", hasBody = false)
fun deleteItemId(
@Path("id") id: Int
) : Call<YourResponse>
hasBody =
true -> if api has request body
false -> if api has not a request body