@DELETE("/job/deletejob")
Observable<JobDeleteResponseModel> jobDelete( @Body JobDeleteRequestModel model);
am getting this error:
Non-body HTTP method cannot contain @Body or @TypedOutput
@DELETE("/job/deletejob")
Observable<JobDeleteResponseModel> jobDelete( @Body JobDeleteRequestModel model);
am getting this error:
Non-body HTTP method cannot contain @Body or @TypedOutput
I've used this official workaround recently:
@HTTP(method = "DELETE", path = "/job/deletejob", hasBody = true)
Observable<JobDeleteResponseModel> jobDelete(@Body JobDeleteRequestModel model);
You need to specify parameters
method, path, hasBody
Kotlin way
@HTTP(method = "DELETE", path = "event/eventRemovePicture", hasBody = true)
fun callDeleteImage(
@Body body: RequestBody
): Call<RemoveEventPictureResponse>
I had similar error.
In my case I was using @GET
in Interface but then I corrected it to @POST
method and it worked.
@HTTP(method = "DELETE", path = "api/v3/delete", hasBody = true)
Call<ResponseBody> RESPONSE_BODY_CALL(@Header("Authorization") String authorization, @Body HashMap<String, List> stringListHashMap);
Change
@DELETE("/job/deletejob")
Observable<JobDeleteResponseModel> jobDelete( @Body JobDeleteRequestModel model);
to
@HTTP(method = "DELETE", path = "/job/deletejob", hasBody = true)
Observable<JobDeleteResponseModel> jobDelete( @Body JobDeleteRequestModel model);
The difference is in
@DELETE("/job/deletejob") // For DELETE without body
@HTTP(method = "DELETE", path = "/job/deletejob", hasBody = true) // For DELETE with body
Kotlin Code :
path
is not required if your first argument to interface method is a url annotated with @Url
Example :
@HTTP(method = "DELETE", hasBody = true)
fun deleteStudentFromDatabase(
@Url url: String,
@Body payload: StudentModel
): Observable<Any>
If first argument to interface method is not a url then use this
@HTTP(method = "DELETE", path = "{urlPath}", hasBody = true)
fun deleteStudentFromDatabase(
@Body payload: StudentModel,
@Path("urlPath") url: String
): Observable<Any>
@HTTP(method = "DELETE", path = "{urlPath}", hasBody = true)
Also this is working fine. It happens because the request contains a body but we have not defined that yet.
Retrofit 2, i have change the below code from this
@DELETE("example/user/{id}/list")
suspend fun deleteUserList(@Path(value = "id", encoded = false)key: Int, @Body request: DeleteUserListRequest): Response<BaseResponse>
to
@HTTP(method = "DELETE", path = "example/user/{id}/list",hasBody = true)
suspend fun deleteUserList(@Path(value = "id", encoded = false)key: Int, @Body request: DeleteUserListRequest): Response<BaseResponse>
Above code is working for me
Kotlin with suspend function. By default DELETE method do not supports body. You should explicitly enable it.
@HTTP(
method = "DELETE",
path = "path/to/api/{someRoute}/{id}",
hasBody = true
)
suspend fun delete(
@Path("someRoute") someRoute: String,
@Path("id") id: String,
@Body body: SomeBodyModel,
): Response<Unit>
Use it something like this
suspend fun delete(model: SomeBodyModel) {
val response = api.delete(model)
if (!response.isSuccessful) throw HttpException(response)
}