From 66d1ed494f7b18d0380a2f061071d744e017e651 Mon Sep 17 00:00:00 2001 From: prabal864 <940pps@gmail.com> Date: Wed, 24 Sep 2025 01:03:14 +0530 Subject: [PATCH 1/2] Fix WebFlux JSON array decoding: add reproducer tests for empty and non-empty lists Signed-off-by: prabal864 <940pps@gmail.com> --- .../client/StringArrayDecodeTests.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 spring-webflux/src/test/java/org/springframework/web/reactive/function/client/StringArrayDecodeTests.java diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/StringArrayDecodeTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/StringArrayDecodeTests.java new file mode 100644 index 000000000000..720f016ddafe --- /dev/null +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/StringArrayDecodeTests.java @@ -0,0 +1,44 @@ +package org.springframework.web.reactive.function.client; + +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.Test; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.MediaType; +import reactor.core.publisher.Mono; +import reactor.netty.http.server.HttpServer; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class StringArrayDecodeTests { + + @Test + void decodeNotEmptyList() { + HttpServer server = HttpServer.create() + .port(0) + .route(routes -> routes.get("/not-empty", (req, res) -> + res.addHeader("Content-Type", "application/json") + .sendString(Mono.just("[\"hello\",\"world\"]")) + )); + + var disposable = server.bindNow(); + + int port = disposable.port(); + + WebClient client = WebClient.builder() + .baseUrl("http://localhost:" + port) + .build(); + + List values = client.get() + .uri("/not-empty") + .accept(MediaType.APPLICATION_JSON) + .retrieve() + .bodyToMono(new ParameterizedTypeReference<@NotNull List>() {}) + .block(); + + assertThat(values).containsExactly("hello", "world"); + + disposable.disposeNow(); + } +} From 6f65c2952ecfbdc7dfbee089314245aa4b1cccbe Mon Sep 17 00:00:00 2001 From: prabal864 <940pps@gmail.com> Date: Wed, 24 Sep 2025 01:12:29 +0530 Subject: [PATCH 2/2] Fix WebFlux JSON array decoding: add reproducer tests for empty and non-empty lists Signed-off-by: prabal864 <940pps@gmail.com> --- .../client/StringArrayDecodeTests.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/StringArrayDecodeTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/StringArrayDecodeTests.java index 720f016ddafe..1f2d358ed293 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/StringArrayDecodeTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/StringArrayDecodeTests.java @@ -41,4 +41,33 @@ void decodeNotEmptyList() { disposable.disposeNow(); } + + @Test + void decodeEmptyList() { + HttpServer server = HttpServer.create() + .port(0) + .route(routes -> routes.get("/empty", (req, res) -> + res.addHeader("Content-Type", "application/json") + .sendString(Mono.just("[]")) + )); + + var disposable = server.bindNow(); + int port = disposable.port(); + + WebClient client = WebClient.builder() + .baseUrl("http://localhost:" + port) + .build(); + + List values = client.get() + .uri("/empty") + .accept(MediaType.APPLICATION_JSON) + .retrieve() + .bodyToMono(new ParameterizedTypeReference<@NotNull List>() {}) + .block(); + + assertThat(values).isEmpty(); + + disposable.disposeNow(); + } + }