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

Issue: SPR-15740
This commit is contained in:
Arjen Poutsma 2017-07-06 12:10:55 +02:00
parent 625855c00f
commit 0065bc5ee5
2 changed files with 13 additions and 3 deletions

View File

@ -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<String> queryParam(String name) {
List<String> queryParams = queryParams().get(name);
if (queryParams.isEmpty()) {
List<String> 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 = "";
}

View File

@ -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();