Skip to content

Commit 11aaf6a

Browse files
committed
UriComponentsBuilder.cloneBuilder copies uriVariables
Closes gh-24772
1 parent 701f54b commit 11aaf6a

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ protected UriComponentsBuilder(UriComponentsBuilder other) {
152152
this.host = other.host;
153153
this.port = other.port;
154154
this.pathBuilder = other.pathBuilder.cloneBuilder();
155+
this.uriVariables.putAll(other.uriVariables);
155156
this.queryParams.putAll(other.queryParams);
156157
this.fragment = other.fragment;
157158
this.encodeTemplate = other.encodeTemplate;

spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ public void parsesEmptyUri() {
738738
}
739739

740740
@Test
741-
public void testClone() {
741+
public void testCloneAndMerge() {
742742
UriComponentsBuilder builder1 = UriComponentsBuilder.newInstance();
743743
builder1.scheme("http").host("e1.com").path("/p1").pathSegment("ps1").queryParam("q1").fragment("f1").encode();
744744

@@ -760,6 +760,37 @@ public void testClone() {
760760
assertEquals("f2", result2.getFragment());
761761
}
762762

763+
@Test // gh-24772
764+
public void testDeepClone() {
765+
HashMap<String, Object> vars = new HashMap<>();
766+
vars.put("ps1", "foo");
767+
vars.put("ps2", "bar");
768+
769+
UriComponentsBuilder builder1 = UriComponentsBuilder.newInstance();
770+
builder1.scheme("http").host("e1.com").userInfo("user:pwd").path("/p1").pathSegment("{ps1}")
771+
.pathSegment("{ps2}").queryParam("q1").fragment("f1").uriVariables(vars).encode();
772+
773+
UriComponentsBuilder builder2 = (UriComponentsBuilder) builder1.clone();
774+
775+
UriComponents result1 = builder1.build();
776+
assertEquals("http", result1.getScheme());
777+
assertEquals("user:pwd", result1.getUserInfo());
778+
assertEquals("e1.com", result1.getHost());
779+
assertEquals("/p1/foo/bar", result1.getPath());
780+
assertEquals("q1", result1.getQuery());
781+
assertEquals("f1", result1.getFragment());
782+
assertNull(result1.getSchemeSpecificPart());
783+
784+
UriComponents result2 = builder2.build();
785+
assertEquals("http", result2.getScheme());
786+
assertEquals("user:pwd", result2.getUserInfo());
787+
assertEquals("e1.com", result2.getHost());
788+
assertEquals("/p1/foo/bar", result2.getPath());
789+
assertEquals("q1", result2.getQuery());
790+
assertEquals("f1", result2.getFragment());
791+
assertNull(result1.getSchemeSpecificPart());
792+
}
793+
763794
@Test // SPR-11856
764795
public void fromHttpRequestForwardedHeader() {
765796
MockHttpServletRequest request = new MockHttpServletRequest();

0 commit comments

Comments
 (0)