From d709a69ff1eed3f4c3a3a60b2f503125db4df356 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Thu, 29 Aug 2019 16:11:23 +0200 Subject: [PATCH] Remove buffering of encoded parts in MultipartHttpMessageWriter Closes gh-23518 --- .../http/codec/multipart/MultipartHttpMessageWriter.java | 5 ++--- .../function/client/WebClientIntegrationTests.java | 7 ++++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java index 5730132cf1..f5245b61fa 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java @@ -27,7 +27,6 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; -import java.util.stream.Collectors; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; @@ -249,8 +248,8 @@ public class MultipartHttpMessageWriter extends LoggingCodecSupport private Flux encodePartValues( byte[] boundary, String name, List values, DataBufferFactory bufferFactory) { - return Flux.concat(values.stream().map(v -> - encodePart(boundary, name, v, bufferFactory)).collect(Collectors.toList())); + return Flux.fromIterable(values) + .concatMap(value -> encodePart(boundary, name, value, bufferFactory)); } @SuppressWarnings("unchecked") diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/WebClientIntegrationTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/WebClientIntegrationTests.java index d3ba79d84b..5e06927687 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/WebClientIntegrationTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/WebClientIntegrationTests.java @@ -409,12 +409,13 @@ public class WebClientIntegrationTests { byte[] expected = Files.readAllBytes(resource.getFile().toPath()); Flux body = DataBufferUtils.read(resource, new DefaultDataBufferFactory(), 4096); - this.webClient.post() + Mono result = this.webClient.post() .uri("/") .body(body, DataBuffer.class) .retrieve() - .bodyToMono(Void.class) - .block(Duration.ofSeconds(5)); + .bodyToMono(Void.class); + + StepVerifier.create(result).verifyComplete(); expectRequest(request -> { ByteArrayOutputStream actual = new ByteArrayOutputStream(); -- GitLab