当我使用Retrofit2.0和POST时,body是null,但响应代码是5xx?

时间:2016-08-23 09:42:19

标签: java android http retrofit2

 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()为空。

为什么要响应518?

518的意思是什么?

1 个答案:

答案 0 :(得分:2)

从Retrofit API doc

中可以看到

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状态代码用于服务器错误,虽然我不知道错误到底是什么,但通常它应该是服务器端错误。

作为RFC7231,&#34; 6。响应状态代码&#34;说明。

  

status-code元素是三位整数代码给出   试图理解并满足请求的结果。

     

HTTP 状态代码是可扩展的。不需要HTTP客户端   了解所有已注册状态代码的含义,尽管如此   理解显然是可取的。但是,客户必须   了解任何状态代码的类,如第一个所示   数字,并将无法识别的状态代码视为等效   该类的x00状态代码,但a除外   收件人不得使用无法识别的状态代码缓存响应。

     

例如,如果a收到无法识别的状态代码471   客户端,客户端可以认为它有问题   请求并将响应视为已收到400(不良   请求)状态代码。响应消息通常包含一个   解释状态的表示。

通常情况下,状态代码是为某些常用用途预定义的,可以进行扩展。这意味着可以有一些像518这样的状态代码但是如果你在网上搜索没有确切含义(因为它是自定义的http状态代码)。但您可以将其视为服务器端错误之一(5xx错误)