From 0e83d6585437379ebcb5b76cb1c0ffefadbd7dfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=A4fer=2C=20H=2EH=2E=20=28Hans=20Hosea=29?= Date: Mon, 13 Oct 2025 23:39:05 +0200 Subject: [PATCH] 35628: UriComponentsBuilder: Do not clear queryparams in method query which is intended for adding values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Schäfer, H.H. (Hans Hosea) --- .../web/util/UriComponentsBuilder.java | 3 --- .../web/util/UriComponentsBuilderTests.java | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java index edb0bee58087..7cca92ec24a5 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java +++ b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java @@ -607,9 +607,6 @@ public UriComponentsBuilder query(@Nullable String query) { } resetSchemeSpecificPart(); } - else { - this.queryParams.clear(); - } return this; } diff --git a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java index b0df33c69d84..b2edb42017f3 100644 --- a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java @@ -477,6 +477,24 @@ void replacePath(ParserType parserType) { assertThat(result.toUriString()).isEqualTo("https://www.ietf.org"); } + @ParameterizedTest + @EnumSource + void query(final ParserType parserType) { + final UriComponents uriComponents = UriComponentsBuilder.fromUriString("https://example.com/foo?foo=bar", parserType) + .query("baz=qux") + .build(); + assertThat(uriComponents.getQueryParams()).isEqualTo(Map.of("foo", List.of("bar"), "baz", List.of("qux"))); + } + + @ParameterizedTest + @EnumSource + void queryWithNullDoesRetainQueryParameters(final ParserType parserType) { + final UriComponents uriComponents = UriComponentsBuilder.fromUriString("https://example.com/foo?foo=bar", parserType) + .query(null) + .build(); + assertThat(uriComponents.getQueryParams()).isEqualTo(Map.of("foo", List.of("bar"))); + } + @ParameterizedTest @EnumSource void replaceQuery(ParserType parserType) {