Browse Source

Support null query param values in ServerRequest.queryParam(String)

Issue: SPR-15740
pull/1470/merge
Arjen Poutsma 9 years ago
parent
commit
0065bc5ee5
  1. 8
      spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java
  2. 8
      spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java

8
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.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.Principal; import java.security.Principal;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; 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.PathContainer;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import org.springframework.util.CollectionUtils;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import org.springframework.web.reactive.function.BodyExtractor; import org.springframework.web.reactive.function.BodyExtractor;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
@ -146,12 +148,12 @@ public interface ServerRequest {
* @return the parameter value * @return the parameter value
*/ */
default Optional<String> queryParam(String name) { default Optional<String> queryParam(String name) {
List<String> queryParams = queryParams().get(name); List<String> queryParamValues = queryParams().get(name);
if (queryParams.isEmpty()) { if (CollectionUtils.isEmpty(queryParamValues)) {
return Optional.empty(); return Optional.empty();
} }
else { else {
String value = queryParams.get(0); String value = queryParamValues.get(0);
if (value == null) { if (value == null) {
value = ""; value = "";
} }

8
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")); 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 @Test
public void pathVariable() throws Exception { public void pathVariable() throws Exception {
MockServerHttpRequest mockRequest = MockServerHttpRequest.method(HttpMethod.GET, "http://example.com").build(); MockServerHttpRequest mockRequest = MockServerHttpRequest.method(HttpMethod.GET, "http://example.com").build();

Loading…
Cancel
Save