Browse Source

MockMvc handles param without values

Closes gh-35210
pull/35329/head
rstoyanchev 4 months ago
parent
commit
8ec0c21b0a
  1. 11
      spring-test/src/main/java/org/springframework/test/web/servlet/request/AbstractMockHttpServletRequestBuilder.java
  2. 10
      spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java

11
spring-test/src/main/java/org/springframework/test/web/servlet/request/AbstractMockHttpServletRequestBuilder.java

@ -372,6 +372,10 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo @@ -372,6 +372,10 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo
* @param values one or more values
*/
public B param(String name, String... values) {
if (values.length == 0) {
this.parameters.computeIfAbsent(name, k -> new ArrayList<>());
return self();
}
addToMultiValueMap(this.parameters, name, values);
return self();
}
@ -821,11 +825,8 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo @@ -821,11 +825,8 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo
}
addRequestParams(request, UriComponentsBuilder.fromUri(uri).build().getQueryParams());
this.parameters.forEach((name, values) -> {
for (String value : values) {
request.addParameter(name, value);
}
});
this.parameters.forEach((name, values) ->
request.setParameter(name, values.toArray(new String[0])));
if (!this.formFields.isEmpty()) {
if (this.content != null && this.content.length > 0) {

10
spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java

@ -263,6 +263,16 @@ class MockHttpServletRequestBuilderTests { @@ -263,6 +263,16 @@ 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 queryParameterMap() {
this.builder = new MockHttpServletRequestBuilder(GET).uri("/");

Loading…
Cancel
Save