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