繁体   English   中英

如何通过改造获得 POJO 和原始响应字符串?

[英]How to get both a POJO and the raw response string back with retrofit?

FATAL EXCEPTION: main Process: com.packagename, PID: 11371 java.lang.IllegalStateException: Cannot read raw response body of a converted body.

在改造中,您只能读取 response.body() 一次,因为它是一个流,一旦您调用.string()或当它自动转换为您在Response<T>返回类型中拥有的任何模型类时,它就会自动关闭。 如果您尝试阅读两次,则会出现上述错误。

我需要原始响应字符串以及模型类 做到这一点的最佳方法是什么? 我不想两次调用 API。 有没有办法复制响应体? 理想情况下,我想简单地将 String 和 T 带回响应。 也就是说,不必放弃改造带来的通用类型转换器

您可以通过添加拦截器( https://square.github.io/okhttp/interceptors/ )并在返回响应之前复制响应主体 BufferedSource 来获取原始响应主体。 我无法理解为什么有人想要这样做。

Response response = chain.proceed(request);
ResponseBody responseBody = response.body();

ByteArrayOutputStream output = new ByteArrayOutputStream();
responseBody.source().getBuffer().copyTo(output);
String rawResponseBody = output.toString();

return response;

模型类示例:

public class Post {
    @SerializedName("text")
    private String text;
    private User   user;

    public String getText() {
        return text;
    }

    public User getUser() {
        return user;
    }
}

class User{
    @SerializedName("id")
    private int id;
    @SerializedName("name")
    private String name;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}}

为了获得更好的答案:将您的模型类和 onResponse 方法主体放在您的问题中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM