自定义feign的返回拦截器,遭遇返回流只能读取一次的情况,这个如何处理?

自定义feign的返回拦截器,遭遇返回流只能读取一次的情况,这个如何处理?

@Component
public class FeignResponseInterceptor implements ResponseInterceptor {
    @Override
    public Object aroundDecode(InvocationContext invocationContext) throws IOException {
        Request request = invocationContext.response().request();
        Response response = invocationContext.response();
        Response logResponse = Response.builder()
                .request(request)
                .body(response.body())
                .build();
        String result = StreamUtils.copyToString(logResponse.body().asInputStream(), StandardCharsets.UTF_8);
        return invocationContext.proceed();
    }
}

取出result进行返回日志打印后,返回给接口调用处就是null了,这个谁有这方面的处理经验呢?
不采用result转成Type后return回去的方法,单纯怎么搞才能将流返回回去?

好像与流操作的定义有关。通常的流应该是读取后自动擦除数据的,主要是防止数据堆积阻碍后面的数据正常操作。当初,针对流有一些限定标记,好像是permanent,但是产品里可能没有相关实现(因为有关处理可能会比较复杂,也有可能不做特别申请没有提供服务)。

【相关推荐】



  • 这篇博客: Feign远程调用服务时返回Null的情况中的 Feign远程调用服务时返回Null的情况 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    用object接收也是空的情况下,可以考虑请求头的Content-Type是否正确和请求体是否加了相应的注解,如@requestbody@requestparam@requestHeaders@requestpart


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^