Android Retrofit + Rxjava:如何获得非200代码的响应?

时间:2018-04-27 16:44:08

标签: android retrofit rx-java2 okhttp3

这就是我的请求:

pictures

它应该返回ApiService apiService = retrofit.create(ApiService.class); Observable<Response<UserUpdateResponse>> response = apiService.updateUser(Utils.getHeader(), object); response.subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::onSuccessUpdate, this::onErr, this::hideDialogLoading); 。但是当服务器响应任何代码201,202(任何不是200)时,它将会出错。

这是错误。

  

java.net.ProtocolException:HTTP 205的内容长度非零:121

那么我如何防止它出错,或者如何获得错误体?谢谢!。

2 个答案:

答案 0 :(得分:2)

HTTP响应代码具有预定义的定义,并且一些具有必须满足的要求才被视为有效的HTTP有效负载。您无法重新定义这些代码对您的应用程序的意义,并期望良好实施的客户端接受它。

具体查看具有以下要求的HTTP 205 - Reset Content

  

由于205状态代码意味着不会提供额外的内容,因此服务器不得在205响应中生成有效负载。

通常,应用程序只会为所有请求返回HTTP 200,并在有效负载中包含特定于应用程序的错误代码。你正在做的事情没有多大意义。

答案 1 :(得分:0)

所以从技术上讲,我可以得到答复2xx。问题是响应代码205中的服务器响应主体假定为空(https://tools.ietf.org/html/rfc7231#section-6.3.6)。因此,在服务器上将body设置为null之后,android side正常运行。