[英]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.