2017-01-06 6 views
6

私はdeleteメソッドを作成しようとすると:ボディを改装してHTTP削除を送信するにはどうすればいいですか?

public interface ImageService { 
    @DELETE("api/v1/attachment") 
    Call<BaseResponse> delete(@Body DeleteModel deleteModel); 
} 

を、私は基本的にスタックトレースからこれらの行に沸くエラーが表示されます。

E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.RuntimeException: Failure delivering result 
java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body. 
Caused by: java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body. 

私はdeleteメソッドにボディを追加することができますどのように?

私はここで検索しましたが、3つの答えが見つかりませんでした。

答えて

16

より単純な答えです。

@FormUrlEncoded 
@HTTP(method = "DELETE", path = "/api/analysis_delete", hasBody = true) 
Call<Analysis_Delete_RequestResult_Api10> analysis_delete_api10(@Field("seq") String seq); 

これはトリックです。

+0

です。 – March3April4

+2

@ Bodyを送信する必要がある場合は、@ FormUrlEncodedを削除する必要があります。 – sunlover3

0

サービス:

public interface ImageService { 
    @Post("api/v1/attachment") 
    Call<BaseResponse> delete(@Body DeleteModel deleteModel); 
} 

とservercontroller

import okhttp3.Request; 

private final class ApiInterceptor implements Interceptor { 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request oldRequest = chain.request(); 
     Request.Builder builder = oldRequest.newBuilder(); 
     if(condition) { 
      return chain.proceed(builder.build().newBuilder().delete(builder.build().body()).build()); 
     } 
     return chain.proceed(builder.build()); 
    } 
} 

にあなたが何かを経由して、条件をトリガする必要があり、潜在的に削除するには、URL /ヘッダ/ボディのために何らかのフィルタリングを行う必要がありますトリガー、

削除url/body /ヘッダーがpostまたはget要求と衝突しないほどユニークでない限り、

1

は、ここでそれは同様に、本体とPUTメソッドで動作します私のバージョン

@HTTP(method = "DELETE", path = "{login}", hasBody = true) 
Call<ResponseBody> getData(@Path("login") String postfix, @Body Map<String, Object> options); 
関連する問題