2016-08-23 20 views
0
Gson gson = new Gson(); 
    String json = gson.toJson(account); 
    System.out.println(json); 
    RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); 
    p2PApi.createDepositAcct(body).enqueue(new Callback<Create>() { 
     @Override 
     public void onResponse(Call<Create> call, Response<Create> response) { 
      try { 

       System.out.println(response.code()); 
       System.out.println(response.errorBody().string()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onFailure(Call<Create> call, Throwable t) { 

     } 
    }); 

這是我的代碼,響應成功,但response.code()= 518,並且 響應消息在response.errorBody()中,reponse.body()爲null。當我用POST使用Retrofit2.0時,body是null,但是響應代碼是5xx?

那麼爲什麼要響應518?

什麼意思是518?

回答

1

當你從改造API文檔

https://square.github.io/retrofit/2.x/retrofit/

public T body() 

成功響應的反序列化的響應體看到。

什麼意思是成功的迴應?

public boolean isSuccessful() 

返回true如果代碼()是在範圍[200..300)。

而且errorbody方法描述

public okhttp3.ResponseBody errorBody() 

不成功響應的原始響應體。

不成功的響應表示代碼不在範圍內(200-300),這是isSuccessful()函數中的描述。

如果你的代碼是518,該消息將肯定在errorbody()

對於HTTP狀態代碼的信息,通常你可以從這裏指 https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

5xx狀態代碼是服務器錯誤,儘管我不知道518是什麼錯誤,但通常它應該是服務器端錯誤。

作爲RFC7231,「6。響應狀態碼」說。

狀態碼元件是給予嘗試以瞭解和滿足所述請求的結果 一個三位數整數代碼

HTTP 狀態代碼是可擴展的。 HTTP客戶端並不要求 瞭解所有註冊狀態碼的含義,儘管這樣理解顯然是可取的。但是,客戶端必須瞭解任何狀態碼的類別(如第一個 數字所示),並將無法識別的狀態碼視爲等同於該類別的x00狀態碼的 ,但不包括 收件人必須使用無法識別的狀態碼緩存響應。

例如,如果是由 客戶端接收到的471無法識別的狀態代碼,客戶端可以假定有一些錯誤的 請求和處理響應,如果它已經收到了400(錯誤 請求)狀態代碼。響應消息通常會包含一個解釋狀態的表示形式 。

通常情況下,狀態碼是爲一些常用而預先定義的,並且可以進行擴展。這意味着可能有一些狀態代碼如518,但是如果您搜索網絡,則沒有確切的含義(因爲它是自定義http狀態代碼)。但你可以把它當作服務器端錯誤之一(5xx錯誤)

+0

是的,你說得對,isSuccessful()= false,並且響應消息在errorbody()中,但是服務器中的響應消息內容是意味着成功,這對我來說是非常必要的,所以我感到非常困惑。 – Werb

+0

你的意思是518代碼在你的服務器上成功了嗎?或者518的響應消息(json)意味着服務器成功了? –

+0

我不知道518代碼是什麼意思,儘管Retrofit2 isSuccessful()= false,儘管這個消息屬於reponse.errorbody(),但是消息(json)實際上是我需要的。總之,所有的json消息意味着成功,服務器應該響應200,但現在的代碼是518.對不起,我的英語很差...希望你能理解 – Werb

相關問題