繁体   English   中英

Android Retrofit + Rxjava:如何获得对non200代码的响应?

[英]Android Retrofit + Rxjava: How to get response on non200 code?

这是我的请求的样子:

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);

它应该返回'code':'205' 'msg':'successfully update' 但是,当服务器响应任何代码201,202(非200)时,它将出错。

这是错误。

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

那么如何防止它出错,或者如何得到错误正文? 谢谢!。

HTTP响应代码具有预定义的定义,并且某些要求必须将其完全填充才能被视为有效的HTTP有效负载。 您无法重新定义这些代码对您的应用程序意味着什么,并期望功能良好的客户接受它。

专门查看HTTP 205-重置内容 ,它具有以下要求:

由于205状态代码暗示将不提供任何其他内容,因此服务器不得在205响应中生成有效负载。

通常,应用程序将针对所有请求返回HTTP 200,并在有效负载中包含特定于应用程序的错误代码。 你在做什么并没有多大意义。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM