diff --git a/pom.xml b/pom.xml index 0e9140743..c0d87fc14 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ 17.0 - 0.12.0.RELEASE + 0.13.0.BUILD-SNAPSHOT DATACMNS 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 { + } }