當我通過成功的 Retrofit2 發出登錄請求時,我得到一個空的主體。但是,無論出于何種原因登錄失敗時,回應都會回傳一個 JSON 正文,如下所示:{ message: "error message"}。
問題如下,如果我像這樣對呼叫進行建模:
interface LoginAPIService {
@POST("login")
fun login(@Body body: RequestBody): Call<LoginResponse>
}
當回傳的主體為空時,我將收到 EOF 失敗,但是如果我將呼叫建模為:
interface LoginAPIService {
@POST("login")
fun login(@Body body: RequestBody): Call<Void>
}
那么我將不會收到錯誤訊息,必須為用戶列印出來。請建議如何處理這種奇怪的情況。
uj5u.com熱心網友回復:
首先嘗試使用Call<Response<LoginResponse>>(注意:確保它是 Retrofit Response<>,而不是 OkHttp Response)。然后你在所有情況下都會得到“成功”回呼,所以你這樣做
if(it.isSuccessful)
return it.body
else
parseErrorJson(it.errorBody().byteStream()) //.bytestream() for GSon, .source() for Moshi
其中 parseErrorJson 解釋錯誤的主體。
如果所有錯誤具有相同的格式,您可以將類似的代碼放入攔截器中。
充其量,將錯誤物件包裝到自定義例外中并拋出它。
uj5u.com熱心網友回復:
我解決這個問題的方法是從 okhttp3 進行呼叫。這樣我的 onSuccess 是正確的,我收到錯誤訊息的方式是使用
val jObjError = JSONObject(response.errorBody()!!.string())
loginLiveData.postValue(jObjError.get("message").toString())
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325935.html
