当前位置: 首页 > 知识库问答 >
问题:

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

笪昌翰
2023-03-14
FATAL EXCEPTION: main Process: com.packagename, PID: 11371 java.lang.IllegalStateException: Cannot read raw response body of a converted body.

在referfit中,您只能读取response.body()一次,因为它是一个流,一旦调用.string()或自动转换为response 返回类型中的任何模型类,它就会自动关闭。如果你尝试读两次,那么你会得到上面的错误。

我既需要原始响应字符串,也需要模型类。做这件事最好的方法是什么?我不想调用两次API。有什么方法可以复制响应体吗?理想情况下,我希望简单地获取String并返回响应。也就是说,不必放弃改型带来的通用类型转换器的好处

共有1个答案

贾兴学
2023-03-14

您可以通过添加拦截器(https://square.github.io/okhttp/interceptors/),并在返回响应之前复制responsebody 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;
 类似资料:
  • 我正试图通过改型2获得原始响应。0.2. 到目前为止,我试图使用以下代码行打印响应,但它打印的是地址,而不是确切的响应正文。 日志i(“原始消息”,response.body()。toString());

  • 如何获得原始json输出。如果可能的话,我不想实现用户数据类和解析器。有什么办法吗? 标记重复的帖子(获得原始HTTP响应与改造)不是为Kotlin和我需要Kotlin版本。

  • 是否可以使用改型库只累加字符串响应?我有一种情况,我需要在我的链接上添加查询,以便该链接看起来像:localhost//register?handle=someid SomeID是整数,当我这样做时,我将从服务器收到由20个字符组成的字符串格式的响应。我怎样才能得到那个回应?改型甚至可以处理不是Json格式的响应吗?

  • 如何将此Json响应转换为改装bean我得到了Gson错误,就像使用JsonReader一样。setLenient(true)在第1行第1列路径接受格式错误的JSON$ api调用为 字符串CATEGORY\u API=“”https://api.callingservice.com"; 请帮助我解决这个问题,如何将Json响应转换为Bean,我的Bean类如下

  • 如果我尝试实现一个自定义转换器(我在网上找到了一些例子),它会抱怨我没有实现抽象方法convert(F),而这些例子都没有实现。 谢了。