diff --git a/src/main/java/org/springframework/hateoas/TemplateVariables.java b/src/main/java/org/springframework/hateoas/TemplateVariables.java index 2812b196..c8f0713d 100644 --- a/src/main/java/org/springframework/hateoas/TemplateVariables.java +++ b/src/main/java/org/springframework/hateoas/TemplateVariables.java @@ -77,7 +77,12 @@ public final class TemplateVariables implements Iterable, Seri List result = new ArrayList(this.variables.size() + variables.size()); result.addAll(this.variables); - result.addAll(variables); + + for (TemplateVariable variable : variables) { + if (!result.contains(variable)) { + result.add(variable); + } + } return new TemplateVariables(result); } diff --git a/src/test/java/org/springframework/hateoas/TemplateVariablesUnitTest.java b/src/test/java/org/springframework/hateoas/TemplateVariablesUnitTest.java index 2bc06c67..eeea5da3 100644 --- a/src/test/java/org/springframework/hateoas/TemplateVariablesUnitTest.java +++ b/src/test/java/org/springframework/hateoas/TemplateVariablesUnitTest.java @@ -15,9 +15,11 @@ */ package org.springframework.hateoas; -import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; +import java.util.List; + import org.junit.Test; import org.springframework.hateoas.TemplateVariable.VariableType; @@ -116,4 +118,18 @@ public class TemplateVariablesUnitTest { assertThat(variables.toString(), is("{&foo,bar}")); } + /** + * @see #198 + */ + @Test + public void dropsDuplicateTemplateVariable() { + + TemplateVariable variable = new TemplateVariable("foo", VariableType.REQUEST_PARAM); + TemplateVariables variables = new TemplateVariables(variable); + + List result = variables.concat(variable).asList(); + + assertThat(result, hasSize(1)); + assertThat(result, hasItem(variable)); + } }