繁体   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