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

时间:2015-01-14 10:05:13

标签: android retrofit http-status-code-204

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

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

成功删除后,服务器返回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

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

3 个答案:

答案 0 :(得分:20)

Retrofit 2.x no longer has a ResponseCallback as mentioned in the other answer. You want to use a Response<Void> type.

The RxJava declaration:

@PUT Observable<Response<Void>> foo();

The standard declaration:

@PUT Call<Response<Void>> bar();

答案 1 :(得分:8)

Jake Wharton在评论中指出了解决方案。使用ResponseCallback。

编辑:此响应不再适用于Retrofit&lt; 2。

答案 2 :(得分:1)

这是实现处理 HTTP 204 和无内容的 kotlin 方式。

@DELETE(USER_API_BASE_URL + "/{id}")
suspend fun deleteuser(@HeaderMap headers: Map<String, String>, 
                       @Path("id") id: String)
: Response<Void>