2017-01-06 12 views
6

जब मैं एक हटाने विधि बनाने की कोशिश:रेट्रोफिट में किसी शरीर के साथ HTTP-Delete कैसे भेजें?

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. 

मैं कैसे किसी वस्तु को किसी हटाने विधि को जोड़ सकते हैं ?

मैंने यहां खोज की है लेकिन 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

यह रूप में अच्छी तरह शरीर के साथ PUT तरीकों पर काम करेगा। – March3April4

+2

यदि आपको @ बॉडी भेजने की आवश्यकता है, तो आपको @ 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()); 
    } 
} 

आप कुछ के माध्यम से, हालत को गति प्रदान करने और संभावित यूआरएल/हैडर/शरीर को दूर करने के लिए कुछ छानने क्या करना है करने के लिए है ट्रिगर,

जब तक यूआरएल/बॉडी/हेडर हटाएं पोस्ट के साथ टकराने या अनुरोध प्राप्त करने के लिए पर्याप्त अद्वितीय नहीं है।

1

यहाँ मेरी संस्करण

@HTTP(method = "DELETE", path = "{login}", hasBody = true) 
Call<ResponseBody> getData(@Path("login") String postfix, @Body Map<String, Object> options); 
संबंधित मुद्दे