diff --git a/src/main/java/org/springframework/hateoas/UriTemplate.java b/src/main/java/org/springframework/hateoas/UriTemplate.java index 3287b384..71a485e9 100644 --- a/src/main/java/org/springframework/hateoas/UriTemplate.java +++ b/src/main/java/org/springframework/hateoas/UriTemplate.java @@ -58,10 +58,11 @@ public class UriTemplate implements Iterable, Serializable { private static final Map CACHE = new ConcurrentReferenceHashMap<>(); private final TemplateVariables variables; - private String toString; private String baseUri; private transient UriBuilderFactory factory; + private String toString; + /** * Creates a new {@link UriTemplate} using the given template string. * @@ -106,18 +107,21 @@ public class UriTemplate implements Iterable, Serializable { } /** - * Creates a new {@link UriTemplate} from the given base URI and {@link TemplateVariables}. + * Creates a new {@link UriTemplate} from the given base URI, {@link TemplateVariables} and {@link UriBuilderFactory}. * * @param baseUri must not be {@literal null} or empty. * @param variables must not be {@literal null}. + * @param factory must not be {@literal null}. */ - UriTemplate(String baseUri, TemplateVariables variables) { + private UriTemplate(String baseUri, TemplateVariables variables, UriBuilderFactory factory) { Assert.hasText(baseUri, "Base URI must not be null or empty!"); Assert.notNull(variables, "Template variables must not be null!"); + Assert.notNull(factory, "UriBuilderFactory must not be null!"); this.baseUri = baseUri; this.variables = variables; + this.factory = factory; } /** @@ -179,7 +183,7 @@ public class UriTemplate implements Iterable, Serializable { result.add(variable); } - return new UriTemplate(baseUri, this.variables.concat(result)); + return new UriTemplate(baseUri, this.variables.concat(result), this.factory); } /** diff --git a/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java b/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java index 9189ee94..4de61829 100755 --- a/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java +++ b/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java @@ -291,6 +291,15 @@ class UriTemplateUnitTest { } } + @Test // #1165 + void expandsTemplateWithAddedVariable() { + + UriTemplate template = UriTemplate.of("/foo") // + .with(new TemplateVariable("bar", VariableType.REQUEST_PARAM)); + + assertThat(template.expand("value").toString()).isEqualTo("/foo?bar=value"); + } + private static void assertVariables(UriTemplate template, TemplateVariable... variables) { assertVariables(template, Arrays.asList(variables)); }