Openfeign ErrorDecoder导致java.io.IOException:流已关闭

当我尝试实现ErrorDecoder来解码假异常时,我发现response.body()中的流是关闭的,所以当我尝试读取流并转换为字符串时,它抛出java.io.IOException: stream is closed。这真的很困惑,因为在解码器之前,我没有做任何事情来提前关闭流。

Stack Overflow用户

发布于 2020-06-05 02:02:26

我经历了这个噩梦,这都是IDE的错。

调试模式中的断点在导致流关闭的response.body().asReader结束/之前。

只需在读取正文后开始调试,一切都很顺利。

Stack Overflow用户

发布于 2020-09-22 19:31:07

记录器/ System.out.println /集成开发环境调试模式

在获取response.body()之前,不要使用上述任何功能

如果您使用上面的任何特性来打印/记录/查看您的response对象,那么它将在内部处理response.body()并关闭InputStream。因此,在这种情况下,您将得到Stream is closed错误。

要解决此问题,请在记录器之前处理response.body()。现在,您可以通过运行应用程序来检查这一点,但不能在调试模式下运行。

示例代码:

复制代码
@Override
  public Exception decode(final String methodKey, final Response response) {
    final String error = getResponseBodyAsString(response.body());
    LOGGER.error("{} failed with response {}", methodKey, response);
    return new ServiceException("Request failed with status: " + response.status()
                                                         + " and error: " + error);
  }

  private String getResponseBodyAsString(final Response.Body body) {
    try {
      return IOUtils.toString(body.asReader(StandardCharsets.UTF_8));
    } catch (final IOException e) {
      LOGGER.error("Failed to read the response body with error: ", e);
    }
    return null;
  }

注意:如果您处于调试模式,那么您的想法将处理此响应,因此即使在这种情况下,您也会得到相同的错误。因此,请不要在调试模式下检查此选项。

原文链接:Openfeign ErrorDecoder导致java.io.IOException:流已关闭-腾讯云开发者社区-腾讯云

相关推荐
starzy19901 小时前
深入理解Scala可变Map:动态构建场景下的性能与设计权衡
开发语言·scala
奶油话梅糖1 小时前
打开项目 0.9 秒、内存只有 IDEA 的 1/12:OpenIDEA 用 Rust 把 IntelliJ IDEA 重造了一遍
java·rust·github·intellij-idea
vipxieliang1 小时前
语言对比卡:PHP vs Go vs Java 的优缺点、适用场景与「为什么选 PHP」
java·go·php
Rain的Java大神之路2 小时前
公交App上“还有2站,约5分钟”怎么实现?90%的人答错这道大厂面试题:GPS漂移、ETA不准、10万QPS热点读全拆透(附完整代码)
java·后端·面试
golang学习记2 小时前
IDEA 2026.3 远程开发迎来重磅升级
java·ide·intellij-idea·远程开发
天天被压力2 小时前
【A股分钟级高频数据完全手册 #04】指数分钟级行情数据接口:沪深指数Pro版最新分时取数
java·人工智能·python
敲代码的小小酥2 小时前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
天天被压力2 小时前
【A股分钟级高频数据完全手册 #03】股票历史1分钟K线数据接口怎么用:Pro版批量拉取与本地缓存
java·人工智能·python
zhanghaha13142 小时前
C# 系列教程_7 判断语句(分支)保姆级精讲
开发语言·c#
apcipot_rain2 小时前
C++转Java日记(02)
java·开发语言·c++