【发布时间】:2020-07-16 07:21:53
【问题描述】:
我有一个这样构建的假客户端服务:
Feign.Builder builder = Feign.builder()
.contract(new SpringMvcContract())
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.errorDecoder(new FeignClientErrorHandler())
return builder.target(targetClass, url);
我有FeignClientErrorDecoder,看起来像这样:
public class FeignClientErrorDecoder implements ErrorDecoder {
private static final ObjectMapper MAPPER = new ObjectMapper().registerModule(new JavaTimeModule());
@Override
public Exception decode(final String methodKey,
final Response response) {
try {
byte[] body = Util.toByteArray(response.body().asInputStream());
ApiError apiError = MAPPER.readValue(body, ApiError.class);
return ExceptionFactory.createFrom(apiError);
} catch (IOException | ApiErrorException e) {
return new TechnicalClientException("Could not extract error payload.", e);
}
}
}
无论我选择哪种读取输入流解决方案,我总是收到stream is closed 错误。
我错过了什么?谁在关闭它?任何解决方法?
完整代码在这里:
https://github.com/louisamoros/feign-error-code
您可以运行mvn clean install 并查看 1 个测试有误。
【问题讨论】:
-
您的代码看起来不错。也许您可以提供minimal reproducible example 并分享它,例如通过github?
-
当然。运行 mvn clean install ,您将进行第二次测试,该测试因错误而失败。 github.com/louisamoros/feign-error-code