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 76f9d72b3101..b7b955be44e0 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 @@ -29,6 +29,7 @@ * Parser for URI's based on RFC 3986 syntax. * * @author Rossen Stoyanchev + * @author Yanming Zhou * @since 6.2 * * @see RFC 3986 @@ -510,7 +511,7 @@ public InternalParser resolveIfOpaque() { public InternalParser captureScheme() { String scheme = captureComponent("scheme"); - this.scheme = (!scheme.startsWith("{") ? scheme.toLowerCase(Locale.ROOT) : scheme); + this.scheme = (!scheme.contains("{") ? scheme.toLowerCase(Locale.ROOT) : scheme); 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 1af1ad314903..4d9354191013 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 @@ -47,6 +47,7 @@ * @author Juergen Hoeller * @author Sam Brannen * @author David Eckel + * @author Yanming Zhou */ class UriComponentsBuilderTests { @@ -637,6 +638,24 @@ void schemeVariableMixedCase(ParserType parserType) { .buildAndExpand(Map.of("TheScheme", "ws")) .toUri(); assertThat(uri.toString()).isEqualTo("ws://example.org"); + + uri = UriComponentsBuilder + .fromUriString("{TheScheme}s://example.org", parserType) + .buildAndExpand(Map.of("TheScheme", "ws")) + .toUri(); + assertThat(uri.toString()).isEqualTo("wss://example.org"); + + uri = UriComponentsBuilder + .fromUriString("s{TheScheme}://example.org", parserType) + .buildAndExpand(Map.of("TheScheme", "ws")) + .toUri(); + assertThat(uri.toString()).isEqualTo("sws://example.org"); + + uri = UriComponentsBuilder + .fromUriString("s{TheScheme}s://example.org", parserType) + .buildAndExpand(Map.of("TheScheme", "ws")) + .toUri(); + assertThat(uri.toString()).isEqualTo("swss://example.org"); } @ParameterizedTest