![](/img/trans.png)
[英]errorBody() returns null in Retrofit2 despite a rawResponse
[英]retrofit2 errorbody.content is not accessible
你可以试试:
String errorBody = value.errorBody().string;
要么
String errorBody = value.errorBody().toString();
Retrofit的错误正文的类型为OkHttp3 ResponseBody
。 此类是抽象的,其实现定义了内部表示内容的不同方式。
有多种获取内容的方法。 您可以以bytes
,字符串或字符串形式获取它,甚至可以获取InputStream
在此处检查它们。
我想一个简单的方法是使用string()
:
value.errorBody().string();
请注意,这些方法通常从缓冲区读取响应,这意味着,如果我没有记错的话,再次调用string()
不会再为您提供响应的内容。 特别是, string()
还将整个主体读入内存,这可能会导致内存不足异常。
拥有内容之后,如果要将其作为数据模型中的对象,则必须手动对其进行反序列化。 有很多方法可以做到这一点,并且很容易在网上找到,但是出于完整性考虑,下面是使用gson
的一种方法:
String error = value.errorBody().string();
MyPojo pojo = new Gson().fromJson(error, MyPojo.class);
(这里MyPojo
是代表错误的错误类)
没有http错误代码,您将无法获得errorBody。 像这样使用smt:
if (!value.isSuccessful && value.errorBody() != null) {
val errorBodyText = value.errorBody()?.string()?:""
val errorResponse = Gson().fromJson<ErrorObject>(errorBodyText, ErrorObject::class.java)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.