diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/AbstractMockHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/AbstractMockHttpServletRequestBuilder.java index 8d688e7bfd4..a1b34f49a72 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/AbstractMockHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/AbstractMockHttpServletRequestBuilder.java @@ -342,7 +342,7 @@ public abstract class AbstractMockHttpServletRequestBuilder new ArrayList<>()); - return self(); - } - addToMultiValueMap(this.parameters, name, values); + this.parameters.addAll(name, Arrays.asList(values)); return self(); } @@ -823,10 +819,9 @@ public abstract class AbstractMockHttpServletRequestBuilder - request.addParameter(name, values.toArray(new String[0]))); + addRequestParams(request, UriComponentsBuilder.fromUri(uri).build().getQueryParams()); + this.parameters.forEach((name, values) -> request.addParameter(name, values.toArray(new String[0]))); if (!this.formFields.isEmpty()) { if (this.content != null && this.content.length > 0) { @@ -993,19 +988,10 @@ public abstract class AbstractMockHttpServletRequestBuilder map, String name, Object value) { Assert.hasLength(name, "'name' must not be empty"); Assert.notNull(value, "'value' must not be null"); map.put(name, value); } - private static void addToMultiValueMap(MultiValueMap map, String name, T[] values) { - Assert.hasLength(name, "'name' must not be empty"); - Assert.notEmpty(values, "'values' must not be empty"); - for (T value : values) { - map.add(name, value); - } - } - } diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java index 6ba183d9aa4..9225771224b 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java @@ -230,7 +230,7 @@ class MockHttpServletRequestBuilderTests { } @Test - void requestParameterFromQuery() { + void requestParameterFromQueryString() { this.builder = new MockHttpServletRequestBuilder(GET).uri("/?foo=bar&foo=baz"); MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); @@ -241,7 +241,7 @@ class MockHttpServletRequestBuilderTests { } @Test - void requestParameterFromQueryList() { + void requestParameterFromQueryStringWithListValues() { this.builder = new MockHttpServletRequestBuilder(GET).uri("/?foo[0]=bar&foo[1]=baz"); MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); @@ -263,25 +263,6 @@ class MockHttpServletRequestBuilderTests { assertThat(request.getQueryString()).isEqualTo("foo=bar&foo=baz"); } - @Test // gh-35210 - void queryParameterWithoutValues() { - this.builder = new MockHttpServletRequestBuilder(GET).uri("/"); - this.builder.queryParam("foo"); - MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); - - assertThat(request.getQueryString()).isEqualTo("foo"); - assertThat(request.getParameterMap().get("foo")).containsExactly(); - } - - @Test - void queryParametersWithUriAndQueryParam() { - this.builder = new MockHttpServletRequestBuilder(GET).uri("/path?param1=value1"); - this.builder.queryParam("param1", "value2"); - MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); - - assertThat(request.getParameterMap().get("param1")).containsExactly("value1", "value2"); - } - @Test void queryParameterMap() { this.builder = new MockHttpServletRequestBuilder(GET).uri("/"); @@ -299,7 +280,7 @@ class MockHttpServletRequestBuilderTests { } @Test - void queryParameterList() { + void queryParameterWithListValues() { this.builder = new MockHttpServletRequestBuilder(GET).uri("/"); this.builder.queryParam("foo[0]", "bar"); this.builder.queryParam("foo[1]", "baz"); @@ -311,6 +292,25 @@ class MockHttpServletRequestBuilderTests { assertThat(request.getParameter("foo[1]")).isEqualTo("baz"); } + @Test // gh-35329 + void queryParameterAndQueryString() { + this.builder = new MockHttpServletRequestBuilder(GET).uri("/path?param1=value1"); + this.builder.queryParam("param1", "value2"); + MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); + + assertThat(request.getParameterMap().get("param1")).containsExactly("value1", "value2"); + } + + @Test // gh-35210 + void queryParameterWithoutValues() { + this.builder = new MockHttpServletRequestBuilder(GET).uri("/"); + this.builder.queryParam("foo"); + MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); + + assertThat(request.getQueryString()).isEqualTo("foo"); + assertThat(request.getParameterMap().get("foo")).containsExactly(); + } + @Test void formField() { this.builder = new MockHttpServletRequestBuilder(POST).uri("/");