簡體   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