2015-12-07 33 views
11

我正在使用Retrofit在我的Web服務器中創建POST請求。Retrofit 2 - 當響應狀態爲422(不可處理的實體)時響應正文null null

但是,當響應狀態爲422 (unprocessable entity)時,我似乎無法得到響應主體。答覆機構始終是null

我想知道我是否做錯了什麼,或者是否有解決方法。因爲我在請求中使用與Postman相同的json,並且它正常返回正文。

這是方法:

@Headers("Content-Type: application/vnd.api+json") 
@POST("my_endpoint") 
Call<JsonObject> postEntry(@Header("Authorization") String authorization, @Body JsonObject json); 

身體是一個JSONObject,我不會像序列化的文件說。但我不認爲這是問題。

任何幫助表示讚賞,謝謝。

+0

是你的API中'422'錯誤返回一些身體?你在android中映射了嗎? –

+0

@DeividiCavarzan是的,正如我在問題中提到的那樣,當我使用郵差發出請求時,它會完美地返回身體。我在兩個地方使用相同的json對象。 –

+0

@DeividiCavarzan關於映射,是的,我做到了。它實際上用'response.body()== null'執行回調函數中的'onResponse(Response response,Retrofit retrofit)'。 –

回答

9

默認情況下,當您的服務器返回錯誤代碼response.body()始終爲null。你在找什麼是response.errorBody()。一個常見的做法是這樣的:

@Override 
    public void onResponse(Response<JsonObject> response, Retrofit retrofit) 
    { 
     if (response.isSuccess()) 
     { 
      response.body(); // do something with that 
     } 
     else 
     { 
      response.errorBody(); // do something with that 
     } 
    } 

如果你需要真正的高級看一看Interceptorshow to use them

+1

謝謝..但我的errorBody()總是空太..我設法使其工作,無需改造。我給你賞金,因爲它將會到期 –

+0

Ty。通過攔截器,您可以檢查引擎蓋下發生了什麼,並查看原始請求和響應。無論如何,我很高興你找到了一種方式:) – tochkov