![](/img/trans.png)
[英]How to parse reponse body from REST API when response code is 4xx in java
[英]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.