Consistent encoding in DefaultUriBuilderFactory
Unlike 5,1, TEMPLATE_AND_VALUES is not the default encoding mode. Nevertheless when that mode is used, it should work consistently. Issue: SPR-17465
This commit is contained in:
@@ -228,16 +228,14 @@ public class DefaultUriBuilderFactory implements UriBuilderFactory {
|
||||
}
|
||||
|
||||
private UriComponentsBuilder initUriComponentsBuilder(String uriTemplate) {
|
||||
|
||||
if (StringUtils.isEmpty(uriTemplate)) {
|
||||
return 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;
|
||||
if (StringUtils.isEmpty(uriTemplate)) {
|
||||
result = baseUri != null ? baseUri.cloneBuilder() : UriComponentsBuilder.newInstance();
|
||||
}
|
||||
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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user