Por qué mi ClientHttpRequestInterceptor personalizado con respuesta vacía

He hecho lo siguiente para mi interceptor de registro personalizado

public class HttpLoggingInterceptor implements ClientHttpRequestInterceptor {
    private final static Logger log = LoggerFactory.getLogger(HttpLoggingInterceptor.class);

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        logRequest(request, body);
        ClientHttpResponse response = execution.execute(request, body);
        logResponse(response);
        return response;
    }

    private void logRequest(HttpRequest request, byte[] body) throws IOException {
        log.info("Request URI : {}, Method : {}, Headers : {}, Request body : {}", request.getURI(), request.getMethod(), request.getHeaders(), new String(body, "UTF-8"));

    }

    private void logResponse(ClientHttpResponse response) throws IOException {
        log.info("Response Status code : {}, Status text : {}, Headers : {}, Response body: {}", response.getStatusCode(), response.getStatusText(), response.getHeaders(), StreamUtils.copyToString(response.getBody(), Charset.defaultCharset()));
    }
}

Y estoy configurando el interceptor al restoTemplate

   @Autowired
    public RestTemplate restTemplate;

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        List<ClientHttpRequestInterceptor> clientHttpRequestInterceptors = new ArrayList<>();
        clientHttpRequestInterceptors.add(new HttpLoggingInterceptor());
//        clientHttpRequestInterceptors.addAll(restTemplate.getInterceptors());
        restTemplate.setInterceptors(clientHttpRequestInterceptors);
//        restTemplate.setInterceptors(Collections.singletonList(new HttpLoggingInterceptor()));
}

El registrador está imprimiendo la respuesta correctamente en la consola, pero al final la respuesta se devuelve vacía a la persona que llama. No puedo depurar y resolverlo.

Me he dado cuenta de que elStreamUtils.copyToString(response.getBody(), Charset.defaultCharset()) está leyendo el flujo de entrada una vez y ya no tiene el cuerpo de respuesta en él (que ahora está vacío)

¿Alguien más también enfrenta el mismo problema y tiene alguna idea de duplicar InputStream sin leerlo desde el InputStream original?

Respuestas a la pregunta(1)

Su respuesta a la pregunta