簡體   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