From 911bec4bd6ff8f09df35e659ea4fc6d709c3f9f4 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 12 Jan 2016 10:56:33 +0100 Subject: [PATCH] #186 - AnnotationMappingDiscoverer now uses first mapping in case multiple ones are defined. --- .../core/AnnotationMappingDiscoverer.java | 11 ----------- .../AnnotationMappingDiscovererUnitTest.java | 18 ++++++++++++++++++ .../mvc/ControllerLinkBuilderUnitTest.java | 9 ++++++--- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/springframework/hateoas/core/AnnotationMappingDiscoverer.java b/src/main/java/org/springframework/hateoas/core/AnnotationMappingDiscoverer.java index 619353fd..e96f6cdb 100644 --- a/src/main/java/org/springframework/hateoas/core/AnnotationMappingDiscoverer.java +++ b/src/main/java/org/springframework/hateoas/core/AnnotationMappingDiscoverer.java @@ -70,11 +70,6 @@ public class AnnotationMappingDiscoverer implements MappingDiscoverer { String[] mapping = getMappingFrom(findAnnotation(type, annotationType)); - if (mapping.length > 1) { - throw new IllegalStateException( - String.format("Multiple class level mappings defined on class %s!", type.getName())); - } - return mapping.length == 0 ? null : mapping[0]; } @@ -100,12 +95,6 @@ public class AnnotationMappingDiscoverer implements MappingDiscoverer { Assert.notNull(method, "Method must not be null!"); String[] mapping = getMappingFrom(findAnnotation(method, annotationType)); - - if (mapping.length > 1) { - throw new IllegalStateException( - String.format("Multiple method level mappings defined on method %s!", method.toString())); - } - String typeMapping = getMapping(type); if (mapping == null || mapping.length == 0) { diff --git a/src/test/java/org/springframework/hateoas/core/AnnotationMappingDiscovererUnitTest.java b/src/test/java/org/springframework/hateoas/core/AnnotationMappingDiscovererUnitTest.java index b8d427df..ed25e10d 100644 --- a/src/test/java/org/springframework/hateoas/core/AnnotationMappingDiscovererUnitTest.java +++ b/src/test/java/org/springframework/hateoas/core/AnnotationMappingDiscovererUnitTest.java @@ -128,6 +128,17 @@ public class AnnotationMappingDiscovererUnitTest { assertThat(discoverer.getMapping(method), is("trailing/withslash")); } + /** + * @see #186 + */ + @Test + public void usesFirstMappingInCaseMultipleOnesAreDefined() throws Exception { + + Method method = MultipleMappingsController.class.getMethod("method"); + + assertThat(discoverer.getMapping(method), is("/type/method")); + } + @RequestMapping("/type") interface MyController { @@ -197,4 +208,11 @@ public class AnnotationMappingDiscovererUnitTest { @RequestMapping("////withslash") void withslash(); } + + @RequestMapping({ "/type", "/typeAlias" }) + interface MultipleMappingsController { + + @RequestMapping({ "/method", "/methodAlias" }) + void method(); + } } diff --git a/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java b/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java index 9f8b45a4..f4af2b52 100644 --- a/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java +++ b/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java @@ -98,9 +98,12 @@ public class ControllerLinkBuilderUnitTest extends TestUtils { assertThat(link.getHref(), endsWith("/people")); } - @Test(expected = IllegalStateException.class) - public void rejectsControllerWithMultipleMappings() { - linkTo(InvalidController.class); + /** + * @see #186 + */ + @Test + public void usesFirstMappingInCaseMultipleOnesAreDefined() { + assertThat(linkTo(InvalidController.class).withSelfRel().getHref(), endsWith("/persons")); } @Test