![](/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.