Как отправить HTTP-delete с телом в дооснащении?
когда я пытаюсь создать метод delete:
public interface ImageService {
@DELETE("api/v1/attachment")
Call<BaseResponse> delete(@Body DeleteModel deleteModel);
}
Я получаю ошибку, которая в основном сводится к этим строкам из stacktrace:
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 не ответы и ничего не используя retrofit.
4 ответов
более упрощенный ответ.
@FormUrlEncoded
@HTTP(method = "DELETE", path = "/api/analysis_delete", hasBody = true)
Call<Analysis_Delete_RequestResult_Api10> analysis_delete_api10(@Field("seq") String seq);
это сделает трюк.
вот моя версия
@HTTP(method = "DELETE", path = "{login}", hasBody = true)
Call<ResponseBody> getData(@Path("login") String postfix, @Body Map<String, Object> options);
вот выдержка из документов, это документированная функция аннотации HTTP.
This annotation can also used for sending DELETE with a request body:
interface Service {
@HTTP(method = "DELETE", path = "remove/", hasBody = true)
Call<ResponseBody> deleteObject(@Body RequestBody object);
}
https://square.github.io/retrofit/2.x/retrofit/retrofit2/http/HTTP.html
сервис:
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 / header достаточно уникален, чтобы не сталкиваться с post или get-запросами.