HTTP Interfaces are great but it's impossible to replace pure RestClient calls in all cases. For instance, code like

restClient.put()
                .uri(...)
                .body(body ->  {
                   //use body as OutputStream
                 })
                .retrieve()
                .toBodilessEntity();

or

restClient.get()
                .uri(...)
                .exchange((req, resp) -> {
                    var inputStream = resp.getBody());
                    //use inputStream 
                });

cannot be replaced with HTTP Interface (as I know).

It causes minor inconvenience as HTTP Interface is used in 99% cases but RestClient is still injected to cover cases like download/upload large files without significant memory consumption and all other cases where Stream processing is needed.

Propose to add: * OutputStream (or StreamingHttpOutputMessage.Body) as supported method parameter here https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-http-interface-method-parameters * InputStream or (ResponseEntity?) as supported return value here https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-http-interface-return-values

Comment From: ooraini

I'm in a similar situation. I tried using the ResponseEntity<InputStreamResource> as response type with no luck(stream closed). It seems that the DefaultRestClient unconditionally closes the ClientHttpResponse in twr.

Comment From: kap199297

Is there any update on supporting InputStream? I tried with Resource and InputStream but no luck. We are planning to migrate to the HTTP interface, is there any other alternative to support file download?