diff --git a/spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java b/spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java index ec0b7f629b9..7482989ca34 100644 --- a/spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java +++ b/spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java @@ -563,7 +563,7 @@ abstract class RfcUriParser { } public void captureFragmentIfNotEmpty() { - if (this.index > this.componentIndex + 1) { + if (this.index > this.componentIndex) { this.fragment = captureComponent("fragment"); } } 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 b0df33c69d8..2fe009b0abc 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 @@ -914,4 +914,13 @@ class UriComponentsBuilderTests { assertThat(uri.toString()).isEqualTo("ws://localhost:7777/test"); } + @ParameterizedTest // gh-36029 + @EnumSource + void singleCharFragment(ParserType parserType) { + URI uri = UriComponentsBuilder + .fromUriString("https://localhost/resource#a", parserType) + .build().toUri(); + assertThat(uri.toString()).isEqualTo("https://localhost/resource#a"); + } + }