DATAREST-702 - Tweaked ResourceProcessorHandlerMethodReturnValueHandler to handle potentially proxied ResourceProcessors.

This commit is contained in:
Oliver Gierke
2015-12-11 19:02:19 +01:00
parent 0757253846
commit e08dff846e
2 changed files with 16 additions and 2 deletions

View File

@@ -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));

View File

@@ -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);