diff --git a/spring-web/src/main/java/org/springframework/web/util/DefaultUriBuilderFactory.java b/spring-web/src/main/java/org/springframework/web/util/DefaultUriBuilderFactory.java index 2a2a36c65d..b44df39fae 100644 --- a/spring-web/src/main/java/org/springframework/web/util/DefaultUriBuilderFactory.java +++ b/spring-web/src/main/java/org/springframework/web/util/DefaultUriBuilderFactory.java @@ -228,16 +228,14 @@ public class DefaultUriBuilderFactory implements UriBuilderFactory { } private UriComponentsBuilder initUriComponentsBuilder(String uriTemplate) { - + UriComponentsBuilder result; if (StringUtils.isEmpty(uriTemplate)) { - return baseUri != null ? baseUri.cloneBuilder() : UriComponentsBuilder.newInstance(); + result = baseUri != null ? baseUri.cloneBuilder() : UriComponentsBuilder.newInstance(); } - - UriComponentsBuilder result; - if (baseUri != null) { - UriComponentsBuilder uricBuilder = UriComponentsBuilder.fromUriString(uriTemplate); - UriComponents uric = uricBuilder.build(); - result = uric.getHost() == null ? baseUri.cloneBuilder().uriComponents(uric) : uricBuilder; + else if (baseUri != null) { + UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(uriTemplate); + UriComponents uri = builder.build(); + result = uri.getHost() == null ? baseUri.cloneBuilder().uriComponents(uri) : builder; } else { result = UriComponentsBuilder.fromUriString(uriTemplate); diff --git a/spring-web/src/test/java/org/springframework/web/util/DefaultUriBuilderFactoryTests.java b/spring-web/src/test/java/org/springframework/web/util/DefaultUriBuilderFactoryTests.java index 1f42b32f34..050176ea76 100644 --- a/spring-web/src/test/java/org/springframework/web/util/DefaultUriBuilderFactoryTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/DefaultUriBuilderFactoryTests.java @@ -35,7 +35,7 @@ public class DefaultUriBuilderFactoryTests { @Test public void defaultSettings() { DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(); - URI uri = factory.uriString("/foo").pathSegment("{id}").build("a/b"); + URI uri = factory.uriString("/foo/{id}").build("a/b"); assertEquals("/foo/a%2Fb", uri.toString()); } @@ -126,6 +126,14 @@ public class DefaultUriBuilderFactoryTests { assertEquals(expected, uriBuilder.build(singletonMap("id", id)).toString()); } + @Test + public void encodingTemplateAndValuesSpr17465() { + DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(); + factory.setEncodingMode(EncodingMode.TEMPLATE_AND_VALUES); + URI uri = factory.builder().path("/foo/{id}").build("a/b"); + assertEquals("/foo/a%2Fb", uri.toString()); + } + @Test public void encodingValuesOnlySpr14147() { DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory();