为什么我无法将Retrofit Response转换为此类的对象两次:
public static class ApiError { //inner class in REST-class
@SerializedName("error_code")
private int errorCode;
@SerializedName("error_description")
private String message;
public int errorCode() {
return errorCode;
}
public String message() {
return message;
}
}
转换的交互:
public static ApiError parseError(Response<?> response) {
Converter<ResponseBody, ApiError> converter =
retrofit.responseBodyConverter(ApiError.class, new Annotation[0]);
ApiError error;
try {
error = converter.convert(response.errorBody());
} catch (IOException e) {
return new ApiError();
}
return error;
}
所以error2
对象在其字段errorCode
和message
中没有任何内容但是为什么?
REST.ApiError error = REST.parseError(response);
REST.ApiError error2 = REST.parseError(response);
我在文档中没有看到这一点。
答案 0 :(得分:1)
当您致电response.errorBody()
时,您获得ResponseBody
个实例,其定义为:
public abstract class ResponseBody implements Closeable
这意味着,当您尝试读取流时(可能使用public final byte[] bytes()
方法),您将刷新流。因此关闭,因此无法再次阅读。
<强>解决方案:强>
从Reader
获取ResponseBody
的实例并将其包装到BufferedStream
中:
BufferedReader streams = new BufferedReader(response.errorBody().charStream());
然后你可以随心所欲地在梦中呼叫reset()
:
streams.reset();