Support StreamingHttpOutputMessage in RestClient #35102
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request ensures proper handling of
StreamingHttpOutputMessage
when used with
RestClient
.Motivation
Currently, when a
StreamingHttpOutputMessage.Body
is passed toRestClient.body(...)
, the implementation internally callsbody.writeTo(request.getBody())
.However, in
AbstractStreamingClientHttpRequest
, thegetBody()
methodreturns a
ByteArrayOutputStream
, and invoking it implicitly switches therequest into buffered mode. This breaks the expected behavior for streaming,
as the user might assume the data will be written directly to the underlying
network stream.
Instead, if the underlying request is an instance of
StreamingHttpOutputMessage
, the framework should delegate directly tosetBody(...)
, which properly supports non-buffered streaming.Changes
StreamingHttpOutputMessage
setBody(...)
instead ofgetBody().write(...)
Test Coverage
A new integration test has been added to verify that streamed data is
correctly passed through the
RestClient
without being buffered.This ensures that behavior is correct across different
ClientHttpRequestFactory
implementations.