From 34a307d4a656c0b3e5fa2df62e35b5ffda3bf973 Mon Sep 17 00:00:00 2001 From: rstoyanchev Date: Mon, 22 Jun 2026 11:12:13 +0100 Subject: [PATCH] Improve requestUri handling in ReactorUriHelper Closes gh-36893 --- .../http/server/reactive/ReactorUriHelper.java | 3 +++ .../server/reactive/ReactorUriHelperTests.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorUriHelper.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorUriHelper.java index 223e59a81f6..d9023959594 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorUriHelper.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorUriHelper.java @@ -146,6 +146,9 @@ abstract class ReactorUriHelper { return; } } + if (length > 0 && uri.charAt(0) != '/') { + builder.append('/'); + } builder.append(uri); } diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/ReactorUriHelperTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/ReactorUriHelperTests.java index 502366dce7d..138b24d5b24 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/ReactorUriHelperTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/ReactorUriHelperTests.java @@ -68,6 +68,21 @@ class ReactorUriHelperTests { .hasToString("http://example.org/path"); } + @Test + void requestUriWithoutLeadingSlash() throws URISyntaxException { + given(nettyRequest.scheme()).willReturn("http"); + given(nettyRequest.hostName()).willReturn("example.org"); + given(nettyRequest.hostPort()).willReturn(80); + given(nettyRequest.uri()).willReturn("foo/bar"); + + URI uri = ReactorUriHelper.createUri(nettyRequest); + assertThat(uri).hasScheme("http") + .hasHost("example.org") + .hasPort(-1) + .hasPath("/foo/bar") + .hasToString("http://example.org/foo/bar"); + } + @ParameterizedTest(name = "{displayName}({arguments})") @CsvSource(delimiter='|', value = { "/prefix | /prefix/",