如何在没有返回类型或回调的情况下执行DELETE请求? [改型]

时间:2015-03-10 17:40:08

标签: java android rest retrofit

我需要使用Retrofit执行DELETE请求。所以,我的界面代码片段如下所示:

@DELETE("/api/item/{id}")
void deleteItem(@Path("id") int itemId);

但我收到错误:

  

java.lang.IllegalArgumentException:ApiItem.deleteItem:必须有   返回类型或Callback作为最后一个参数。

但是,根据Rest API的规则,我不应该收到对DELETE请求的任何响应。我该如何在界面中指定它?

感谢。

4 个答案:

答案 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