diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java index 383485c288b..7a10f0da9a6 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java @@ -21,6 +21,7 @@ import java.net.URI; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.Principal; +import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Map; @@ -40,6 +41,7 @@ import org.springframework.http.codec.json.Jackson2CodecSupport; import org.springframework.http.server.reactive.PathContainer; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.lang.Nullable; +import org.springframework.util.CollectionUtils; import org.springframework.util.MultiValueMap; import org.springframework.web.reactive.function.BodyExtractor; import org.springframework.web.server.ServerWebExchange; @@ -146,12 +148,12 @@ public interface ServerRequest { * @return the parameter value */ default Optional queryParam(String name) { - List queryParams = queryParams().get(name); - if (queryParams.isEmpty()) { + List queryParamValues = queryParams().get(name); + if (CollectionUtils.isEmpty(queryParamValues)) { return Optional.empty(); } else { - String value = queryParams.get(0); + String value = queryParamValues.get(0); if (value == null) { value = ""; } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java index 0b568d2d1fb..2461702d9a9 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java @@ -113,6 +113,14 @@ public class DefaultServerRequestTests { assertEquals(Optional.of(""), request.queryParam("foo")); } + @Test + public void absentQueryParam() throws Exception { + MockServerHttpRequest mockRequest = MockServerHttpRequest.method(HttpMethod.GET, "http://example.com?foo").build(); + DefaultServerRequest request = new DefaultServerRequest(mockRequest.toExchange(), messageReaders); + + assertEquals(Optional.empty(), request.queryParam("bar")); + } + @Test public void pathVariable() throws Exception { MockServerHttpRequest mockRequest = MockServerHttpRequest.method(HttpMethod.GET, "http://example.com").build();