diff --git a/pom.xml b/pom.xml index fe9f4b7ec..534162ccc 100644 --- a/pom.xml +++ b/pom.xml @@ -1,8 +1,8 @@ - + 4.0.0 - + org.springframework.data spring-data-commons 1.7.3.BUILD-SNAPSHOT @@ -15,13 +15,13 @@ 1.3.3.BUILD-SNAPSHOT ../spring-data-build/parent/pom.xml - + 1.9.7 - 0.9.0.RELEASE + 0.13.0.BUILD-SNAPSHOT DATACMNS - + org.springframework @@ -74,7 +74,7 @@ spring-web true - + javax.servlet servlet-api @@ -109,7 +109,7 @@ ${querydsl} provided - + javax.ejb @@ -126,21 +126,21 @@ provided true - + javax.el el-api ${cdi} test - + org.apache.openwebbeans.test cditest-owb ${webbeans} test - + org.springframework.hateoas spring-hateoas @@ -152,14 +152,14 @@ spring-webmvc true - + com.sun.xml.bind jaxb-impl 2.2.3U1 test - + xmlunit xmlunit @@ -175,10 +175,11 @@ test - + - + + com.mysema.maven apt-maven-plugin ${apt} @@ -205,14 +206,14 @@ - + spring-libs-snapshot http://repo.spring.io/libs-snapshot - + spring-plugins-release diff --git a/src/main/java/org/springframework/data/web/PagedResourcesAssemblerArgumentResolver.java b/src/main/java/org/springframework/data/web/PagedResourcesAssemblerArgumentResolver.java index a81a6fce9..c9c4f79db 100644 --- a/src/main/java/org/springframework/data/web/PagedResourcesAssemblerArgumentResolver.java +++ b/src/main/java/org/springframework/data/web/PagedResourcesAssemblerArgumentResolver.java @@ -101,7 +101,7 @@ public class PagedResourcesAssemblerArgumentResolver implements HandlerMethodArg private UriComponents resolveBaseUri(MethodParameter parameter) { try { - Link linkToMethod = linkBuilderFactory.linkTo(parameter.getMethod(), new Object[0]).withSelfRel(); + Link linkToMethod = linkBuilderFactory.linkTo(parameter.getDeclaringClass(), parameter.getMethod()).withSelfRel(); return UriComponentsBuilder.fromUriString(linkToMethod.getHref()).build(); } catch (IllegalArgumentException o_O) { return null; diff --git a/src/test/java/org/springframework/data/web/PagedResourcesAssemblerArgumentResolverUnitTests.java b/src/test/java/org/springframework/data/web/PagedResourcesAssemblerArgumentResolverUnitTests.java index 122c50d56..8fbde90df 100644 --- a/src/test/java/org/springframework/data/web/PagedResourcesAssemblerArgumentResolverUnitTests.java +++ b/src/test/java/org/springframework/data/web/PagedResourcesAssemblerArgumentResolverUnitTests.java @@ -27,7 +27,9 @@ import org.junit.rules.ExpectedException; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.MethodParameter; import org.springframework.data.domain.Pageable; +import org.springframework.test.util.ReflectionTestUtils; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.util.UriComponents; /** * Unit tests for {@link PagedResourcesAssemblerArgumentResolver}. @@ -140,6 +142,30 @@ public class PagedResourcesAssemblerArgumentResolverUnitTests { assertThat(result, is(notNullValue())); } + /** + * @see DATACMNS-513 + */ + @Test + public void detectsMappingOfInvokedSubType() throws Exception { + + Method method = Controller.class.getMethod("methodWithMapping", PagedResourcesAssembler.class); + + // Simulate HandlerMethod.HandlerMethodParameter.getDeclaringClass() + // as it's returning the invoked class as the declared one + MethodParameter methodParameter = new MethodParameter(method, 0) { + public java.lang.Class getDeclaringClass() { + return SubController.class; + } + }; + + Object result = resolver.resolveArgument(methodParameter, null, null, null); + + assertThat(result, is(instanceOf(PagedResourcesAssembler.class))); + UriComponents uriComponents = (UriComponents) ReflectionTestUtils.getField(result, "baseUri"); + + assertThat(uriComponents.getPath(), is("/foo/mapping")); + } + private void assertSelectsParameter(Method method, int expectedIndex) throws Exception { MethodParameter parameter = new MethodParameter(method, 0); @@ -190,5 +216,13 @@ public class PagedResourcesAssemblerArgumentResolverUnitTests { @RequestMapping("/{variable}/foo") void methodWithPathVariable(PagedResourcesAssembler assembler); + + @RequestMapping("/mapping") + Object methodWithMapping(PagedResourcesAssembler pageable); + } + + @RequestMapping("/foo") + interface SubController extends Controller { + } }