当我尝试实现 ErrorDecoder
来解码 feign 异常时,我发现 response.body()
中的流已关闭,因此当我尝试读取该流时并转换为字符串,它抛出java.io.IOException:流已关闭
。这真的很困惑,因为在解码器之前,我没有做任何事情来高级关闭流。
public class FeignClientErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
log.info("feign client response: {}", response);
String body = null;
try {
body = Util.toString(response.body().asReader(Charset.defaultCharset()));
} catch (IOException e) {
log.error("feign.IOException", e);
}
return new ServiceException(MessageCode.builder(ExceptionCodeEnum.ERROR));
}
}
最佳答案
我经历了这场噩梦,这都是 IDE 的错。
Debug模式下的断点位于导致流关闭的 response.body().asReader
之上/之前。
阅读正文后就开始调试,一切都很顺利。
关于java - Openfeign ErrorDecoder 导致 java.io.IOException : stream is closed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61472139/