diff --git a/src/main/java/org/springframework/hateoas/hal/HalEmbeddedBuilder.java b/src/main/java/org/springframework/hateoas/hal/HalEmbeddedBuilder.java index f540314f..9025d88f 100644 --- a/src/main/java/org/springframework/hateoas/hal/HalEmbeddedBuilder.java +++ b/src/main/java/org/springframework/hateoas/hal/HalEmbeddedBuilder.java @@ -62,16 +62,21 @@ class HalEmbeddedBuilder { return; } - String singleRel = getDefaultedRelFor(type, false); - List currentValue = embeddeds.get(singleRel); + String rel = getDefaultedRelFor(type, true); + + if (!embeddeds.containsKey(rel)) { + rel = getDefaultedRelFor(type, false); + } + + List currentValue = embeddeds.get(rel); if (currentValue == null) { ArrayList arrayList = new ArrayList(); arrayList.add(value); - embeddeds.put(singleRel, arrayList); + embeddeds.put(rel, arrayList); } else if (currentValue.size() == 1) { currentValue.add(value); - embeddeds.remove(singleRel); + embeddeds.remove(rel); embeddeds.put(getDefaultedRelFor(type, true), currentValue); } else { currentValue.add(value); diff --git a/src/test/java/org/springframework/hateoas/hal/HalEmbeddedBuilderUnitTest.java b/src/test/java/org/springframework/hateoas/hal/HalEmbeddedBuilderUnitTest.java index 7371fa4f..581de6ae 100644 --- a/src/test/java/org/springframework/hateoas/hal/HalEmbeddedBuilderUnitTest.java +++ b/src/test/java/org/springframework/hateoas/hal/HalEmbeddedBuilderUnitTest.java @@ -63,6 +63,20 @@ public class HalEmbeddedBuilderUnitTest { assertThat(map.get("long"), Matchers.> allOf(hasSize(1), hasItem(1L))); } + /** + * @see #110 + */ + @Test + public void correctlyPilesUpResourcesInCollectionRel() { + + Map> map = setUpBuilder("foo", "bar", "foobar", 1L); + + assertThat(map.containsKey("string"), is(false)); + assertThat(map.get("strings"), + Matchers.> allOf(hasSize(3), Matchers. hasItems("foo", "bar", "foobar"))); + assertThat(map.get("long"), Matchers.> allOf(hasSize(1), hasItem(1L))); + } + /** * @see #81, #83 */