MockMvc handles param without values

Closes gh-35210
This commit is contained in:
rstoyanchev 2025-08-13 15:23:04 +01:00
parent 9f9b33c2ac
commit 8ec0c21b0a
2 changed files with 16 additions and 5 deletions

View File

@ -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
}
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) {

View File

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