diff --git a/src/main/java/org/springframework/hateoas/mvc/ControllerLinkBuilderFactory.java b/src/main/java/org/springframework/hateoas/mvc/ControllerLinkBuilderFactory.java index 10870ca2..2f76d723 100644 --- a/src/main/java/org/springframework/hateoas/mvc/ControllerLinkBuilderFactory.java +++ b/src/main/java/org/springframework/hateoas/mvc/ControllerLinkBuilderFactory.java @@ -49,6 +49,7 @@ import org.springframework.web.util.UriTemplate; * * @author Ricardo Gladwell * @author Oliver Gierke + * @author Dietrich Schulten */ public class ControllerLinkBuilderFactory implements MethodLinkBuilderFactory { @@ -109,10 +110,9 @@ public class ControllerLinkBuilderFactory implements MethodLinkBuilderFactory values = new HashMap(); - if (classMappingParameters.hasNext()) { - for (String variable : template.getVariableNames()) { - values.put(variable, classMappingParameters.next()); - } + Iterator names = template.getVariableNames().iterator(); + while (classMappingParameters.hasNext()) { + values.put(names.next(), classMappingParameters.next()); } for (BoundMethodParameter parameter : PATH_VARIABLE_ACCESSOR.getBoundParameters(invocation)) { diff --git a/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java b/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java index 6223dfde..595881a9 100644 --- a/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java +++ b/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java @@ -41,6 +41,7 @@ import org.springframework.web.util.UriComponentsBuilder; * Unit tests for {@link ControllerLinkBuilder}. * * @author Oliver Gierke + * @author Dietrich Schulten */ public class ControllerLinkBuilderUnitTest extends TestUtils { @@ -60,6 +61,17 @@ public class ControllerLinkBuilderUnitTest extends TestUtils { assertThat(link.getHref(), endsWith("/people/15/addresses")); } + /** + * @see #70 + */ + @Test + public void createsLinkToMethodOnParameterizedControllerRoot() { + + Link link = linkTo(methodOn(PersonsAddressesController.class, 15).getAddressesForCountry("DE")).withSelfRel(); + assertThat(link.getRel(), is(Link.REL_SELF)); + assertThat(link.getHref(), endsWith("/people/15/addresses/DE")); + } + @Test public void createsLinkToSubResource() { @@ -220,8 +232,12 @@ public class ControllerLinkBuilderUnitTest extends TestUtils { } @RequestMapping("/people/{id}/addresses") - class PersonsAddressesController { + static class PersonsAddressesController { + @RequestMapping("/{country}") + public HttpEntity getAddressesForCountry(@PathVariable String country) { + return null; + } } @RequestMapping({ "/persons", "/people" })