自定义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,但是产品里可能没有相关实现(因为有关处理可能会比较复杂,也有可能不做特别申请没有提供服务)。
【相关推荐】
用object接收也是空的情况下,可以考虑请求头的Content-Type是否正确和请求体是否加了相应的注解,如@requestbody@requestparam@requestHeaders@requestpart