diff --git a/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java b/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java index 40bb0b01b..c9f890c29 100644 --- a/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java +++ b/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java @@ -109,8 +109,8 @@ class ProxyProjectionFactory implements ProjectionFactory, ResourceLoaderAware, Assert.notNull(projectionType, "Projection type must not be null!"); Assert.isTrue(projectionType.isInterface(), "Projection type must be an interface!"); - if (source == null) { - return null; + if (source == null || projectionType.isInstance(source)) { + return (T) source; } ProxyFactory factory = new ProxyFactory(); diff --git a/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java b/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java index f7f840d12..bd761ebbc 100644 --- a/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java @@ -212,7 +212,17 @@ public class ProxyProjectionFactoryUnitTests { assertThat(data.get("key"), is(nullValue())); } - static class Customer { + @Test // DATACMNS-1121 + public void doesNotCreateWrappingProxyIfTargetImplementsProjectionInterface() { + + Customer customer = new Customer(); + + assertThat(factory.createProjection(Contact.class, customer) == customer, is(true)); + } + + interface Contact {} + + static class Customer implements Contact { public Long id; public String firstname, lastname;