diff --git a/src/main/java/org/springframework/hateoas/TemplateVariables.java b/src/main/java/org/springframework/hateoas/TemplateVariables.java index eae3e448..fbd32937 100644 --- a/src/main/java/org/springframework/hateoas/TemplateVariables.java +++ b/src/main/java/org/springframework/hateoas/TemplateVariables.java @@ -29,9 +29,9 @@ import org.springframework.util.Assert; * * @author Oliver Gierke */ -public class TemplateVariables implements Iterable { +public final class TemplateVariables implements Iterable { - public static TemplateVariables NONE = new TemplateVariables(Collections. emptyList()); + public static TemplateVariables NONE = new TemplateVariables(); private final List variables; diff --git a/src/main/java/org/springframework/hateoas/UriTemplate.java b/src/main/java/org/springframework/hateoas/UriTemplate.java index 74efd6bc..ff3216d3 100644 --- a/src/main/java/org/springframework/hateoas/UriTemplate.java +++ b/src/main/java/org/springframework/hateoas/UriTemplate.java @@ -72,7 +72,7 @@ public class UriTemplate implements Iterable { } } - this.variables = new TemplateVariables(variables); + this.variables = variables.isEmpty() ? TemplateVariables.NONE : new TemplateVariables(variables); this.baseUri = template.substring(0, baseUriEndIndex); } @@ -140,7 +140,11 @@ public class UriTemplate implements Iterable { */ public URI expand(Object... parameters) { - UriComponentsBuilder builder = UriComponentsBuilder.fromPath(baseUri); + if (TemplateVariables.NONE.equals(variables)) { + return URI.create(baseUri); + } + + UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(baseUri); Iterator iterator = Arrays.asList(parameters).iterator(); for (TemplateVariable variable : variables) { @@ -160,8 +164,12 @@ public class UriTemplate implements Iterable { */ public URI expand(Map parameters) { + if (TemplateVariables.NONE.equals(variables)) { + return URI.create(baseUri); + } + Assert.notNull(parameters, "Parameters must not be null!"); - UriComponentsBuilder builder = UriComponentsBuilder.fromPath(baseUri); + UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(baseUri); for (TemplateVariable variable : variables) { appendToBuilder(builder, variable, parameters.get(variable.getName())); diff --git a/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java b/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java index ba1776e3..c205c67d 100644 --- a/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java +++ b/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java @@ -169,6 +169,14 @@ public class UriTemplateUnitTest { assertThat(new UriTemplate("/foo").expand().toString(), is("/foo")); } + /** + * @see #137 + */ + @Test + public void correctlyExpandsFullUri() { + assertThat(new UriTemplate("http://localhost:8080/foo{?bar}").expand().toString(), is("http://localhost:8080/foo")); + } + private static void assertVariables(UriTemplate template, TemplateVariable... variables) { assertThat(template.getVariableNames(), hasSize(variables.length));