改造,回调 204 No Content 响应?
Retrofit, callback for 204 No Content response?
在 Android 上,我最初实现了这样一个 Retrofit 接口:
@DELETE(USER_API_BASE_URL + "/{id}")
public void deleteUser(@Path("id") String id, Callback<User> callback);
服务器 returns 204 NO CONTENT 成功删除。这导致回调触发失败,retrofit.RetrofitError: End of input at character 0 of
,因为它期望 User
对象返回响应。
然后我像这样重写了它,使用 Void
而不是 User
:
@DELETE(USER_API_BASE_URL + "/{id}")
public void deleteUser(@Path("id") String id, Callback<Void> callback); <-- VOID
但是我从回调中得到了同样的错误。
解决这个问题的正确方法是什么?谢谢。
Jake Wharton 在评论中指出了解决方案。使用 ResponseCallback。
编辑:此响应对 Retrofit < 2 不再有效。
Retrofit 2.x
不再有另一个答案中提到的 ResponseCallback
。您要使用 Response<Void>
类型。
RxJava 声明:
@PUT Observable<Response<Void>> foo();
标准声明:
@PUT Call<Response<Void>> bar();
这是实现处理 HTTP 204 和无内容的 kotlin 方式。
@DELETE(USER_API_BASE_URL + "/{id}")
suspend fun deleteuser(@HeaderMap headers: Map<String, String>,
@Path("id") id: String)
: Response<Void>
在 Android 上,我最初实现了这样一个 Retrofit 接口:
@DELETE(USER_API_BASE_URL + "/{id}")
public void deleteUser(@Path("id") String id, Callback<User> callback);
服务器 returns 204 NO CONTENT 成功删除。这导致回调触发失败,retrofit.RetrofitError: End of input at character 0 of
,因为它期望 User
对象返回响应。
然后我像这样重写了它,使用 Void
而不是 User
:
@DELETE(USER_API_BASE_URL + "/{id}")
public void deleteUser(@Path("id") String id, Callback<Void> callback); <-- VOID
但是我从回调中得到了同样的错误。 解决这个问题的正确方法是什么?谢谢。
Jake Wharton 在评论中指出了解决方案。使用 ResponseCallback。
编辑:此响应对 Retrofit < 2 不再有效。
Retrofit 2.x
不再有另一个答案中提到的 ResponseCallback
。您要使用 Response<Void>
类型。
RxJava 声明:
@PUT Observable<Response<Void>> foo();
标准声明:
@PUT Call<Response<Void>> bar();
这是实现处理 HTTP 204 和无内容的 kotlin 方式。
@DELETE(USER_API_BASE_URL + "/{id}")
suspend fun deleteuser(@HeaderMap headers: Map<String, String>,
@Path("id") id: String)
: Response<Void>