簡體   English   中英

當我將Retrofit2.0與POST一起使用時,body為null,但響應代碼為5xx?

[英]When i use Retrofit2.0 with POST , body is null , but the reponse code is 5xx?

 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。

那為什么要回應518?

518是什么意思?

從Retrofit API文檔中可以看到

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

public T body()

成功響應的反序列化響應主體。

什么是成功的回應?

public boolean isSuccessful()

如果code()在[200..300)范圍內,則返回true。

以及錯誤體方法說明

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錯誤)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM