Skip to content

Commit e508dea

Browse files
committed
Merge branch '6.2.x'
2 parents 40eb9c2 + f84552a commit e508dea

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

spring-web/src/main/java/org/springframework/web/client/DefaultRestClient.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,14 @@ public <T> RequestBodySpec body(T body, ParameterizedTypeReference<T> bodyType)
477477

478478
@Override
479479
public RequestBodySpec body(StreamingHttpOutputMessage.Body body) {
480-
this.body = request -> body.writeTo(request.getBody());
480+
this.body = request -> {
481+
if (request instanceof StreamingHttpOutputMessage streamingMessage) {
482+
streamingMessage.setBody(body);
483+
}
484+
else {
485+
body.writeTo(request.getBody());
486+
}
487+
};
481488
return this;
482489
}
483490

spring-web/src/test/java/org/springframework/web/client/RestClientIntegrationTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.web.client;
1818

19+
import java.io.ByteArrayInputStream;
1920
import java.io.IOException;
2021
import java.lang.annotation.ElementType;
2122
import java.lang.annotation.Retention;
@@ -44,6 +45,7 @@
4445
import org.springframework.http.HttpStatusCode;
4546
import org.springframework.http.MediaType;
4647
import org.springframework.http.ResponseEntity;
48+
import org.springframework.http.StreamingHttpOutputMessage;
4749
import org.springframework.http.client.ClientHttpRequestFactory;
4850
import org.springframework.http.client.ClientHttpRequestInterceptor;
4951
import org.springframework.http.client.ClientHttpResponse;
@@ -53,6 +55,7 @@
5355
import org.springframework.http.client.ReactorClientHttpRequestFactory;
5456
import org.springframework.http.client.SimpleClientHttpRequestFactory;
5557
import org.springframework.util.CollectionUtils;
58+
import org.springframework.util.FastByteArrayOutputStream;
5659
import org.springframework.util.FileCopyUtils;
5760
import org.springframework.util.LinkedMultiValueMap;
5861
import org.springframework.util.MultiValueMap;
@@ -602,6 +605,30 @@ public void postForm(ClientHttpRequestFactory requestFactory) {
602605
});
603606
}
604607

608+
@ParameterizedRestClientTest // gh-35102
609+
void postStreamingBody(ClientHttpRequestFactory requestFactory) {
610+
startServer(requestFactory);
611+
prepareResponse(response -> response.setResponseCode(200));
612+
613+
StreamingHttpOutputMessage.Body testBody = out -> {
614+
assertThat(out).as("Not a streaming response").isNotInstanceOf(FastByteArrayOutputStream.class);
615+
new ByteArrayInputStream("test-data".getBytes(UTF_8)).transferTo(out);
616+
};
617+
618+
ResponseEntity<Void> result = this.restClient.post()
619+
.uri("/streaming/body")
620+
.body(testBody)
621+
.retrieve()
622+
.toBodilessEntity();
623+
624+
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK);
625+
626+
expectRequestCount(1);
627+
expectRequest(request -> {
628+
assertThat(request.getPath()).isEqualTo("/streaming/body");
629+
assertThat(request.getBody().readUtf8()).isEqualTo("test-data");
630+
});
631+
}
605632

606633
@ParameterizedRestClientTest
607634
void statusHandler(ClientHttpRequestFactory requestFactory) {

0 commit comments

Comments
 (0)