diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/ResourceProcessorHandlerMethodReturnValueHandler.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/ResourceProcessorHandlerMethodReturnValueHandler.java index 58f07640b..5aa9e8865 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/ResourceProcessorHandlerMethodReturnValueHandler.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/ResourceProcessorHandlerMethodReturnValueHandler.java @@ -85,8 +85,7 @@ public class ResourceProcessorHandlerMethodReturnValueHandler implements Handler for (ResourceProcessor processor : processors) { ResolvableType processorType = ResolvableType.forClass(ResourceProcessor.class, processor.getClass()); - ResolvableType componentType = processorType.getGeneric(0); - Class rawType = getRawType(componentType); + Class rawType = processorType.getGeneric(0).resolve(); if (Resource.class.isAssignableFrom(rawType)) { this.processors.add(new ResourceProcessorWrapper(processor)); diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/ResourceProcessorHandlerMethodReturnValueHandlerUnitTests.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/ResourceProcessorHandlerMethodReturnValueHandlerUnitTests.java index 533a015dc..218d6486b 100644 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/ResourceProcessorHandlerMethodReturnValueHandlerUnitTests.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/ResourceProcessorHandlerMethodReturnValueHandlerUnitTests.java @@ -36,6 +36,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.aop.framework.ProxyFactory; import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; import org.springframework.data.projection.ProjectionFactory; @@ -283,6 +284,20 @@ public class ResourceProcessorHandlerMethodReturnValueHandlerUnitTests { assertThat(wrapper.supports(type, value), is(false)); } + /** + * @see DATAREST-702 + */ + @Test + public void registersProcessorForProxyType() { + + ProjectionProcessor processor = new ProjectionProcessor(); + ProxyFactory factory = new ProxyFactory(processor); + + resourceProcessors.add((ResourceProcessor) factory.getProxy()); + + new ResourceProcessorHandlerMethodReturnValueHandler(delegate, resourceProcessors); + } + // Helpers ---------------------------------------------------------// private void invokeReturnValueHandler(String method, final Matcher matcher, Object returnValue) throws Exception { final MethodParameter methodParam = METHOD_PARAMS.get(method);