From 0065bc5ee55d347de8632f1b3d79e18d6ad4db4e Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Thu, 6 Jul 2017 12:10:55 +0200 Subject: [PATCH] Support null query param values in ServerRequest.queryParam(String) Issue: SPR-15740 --- .../web/reactive/function/server/ServerRequest.java | 8 +++++--- .../function/server/DefaultServerRequestTests.java | 8 ++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) 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();