204无内容响应的改造,回调?

tic*_*fab 14 android retrofit http-status-code-204

在Android上,我最初实现了一个像这样的Retrofit界面:

@DELETE(USER_API_BASE_URL + "/{id}")
public void deleteUser(@Path("id") String id, Callback<User> callback);
Run Code Online (Sandbox Code Playgroud)

成功删除后,服务器返回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
Run Code Online (Sandbox Code Playgroud)

但是我从回调中得到了同样的错误.解决这个问题的正确方法是什么?谢谢.

Wil*_*oef 23

Retrofit 2.x不再有ResponseCallback其他答案中提到的那样.你想使用一种Response<Void>类型.

RxJava声明:

@PUT Observable<Response<Void>> foo();
Run Code Online (Sandbox Code Playgroud)

标准声明:

@PUT Call<Response<Void>> bar();
Run Code Online (Sandbox Code Playgroud)

  • 但问题是即使 web 服务调用有错误,它也会执行成功块而不是 throwable 块 (2认同)

tic*_*fab 8

杰克沃顿在评论中指出了解决方案.使用ResponseCallback.

编辑:此响应不再适用于Retrofit <2.