web-dev-qa-db-ja.com

戻り値の型またはコールバックなしでDELETEリクエストを実行するにはどうすればよいですか? 【後付け】

Retrofitを使用してDELETEリクエストを実行する必要があります。したがって、インターフェイスのコードスニペットは次のようになります。

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

しかし、エラーが発生します:

Java.lang.IllegalArgumentException:ApiItem.deleteItem:最後の引数として戻り値の型またはコールバックのいずれかが必要です。

ただし、Rest APIのルールによれば、DELETEリクエストに対する応答を受信するべきではありません。インターフェイスでどのように指定する必要がありますか?

ありがとう。

10
Mark Korzhov

Voidメソッドが必要な場合は、リクエストメソッドの最後の引数としてコールバックを追加する必要があります。使用できます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);
28

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>() {
...
});
5
BurtK
@FormUrlEncoded
@HTTP(method = "DELETE", path = "manage-feed", hasBody = true)
Call<ResponseBody> deletePost(@Field("post_id") Integer postId, @Field("share_id") Integer sharedMapId);
1
Dishant Kawatra