diff --git a/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java b/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java index 117a4dd46..7e7f9081c 100644 --- a/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java +++ b/src/main/java/org/springframework/data/projection/ProxyProjectionFactory.java @@ -82,8 +82,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 2c683c8ca..4d1905ceb 100644 --- a/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/projection/ProxyProjectionFactoryUnitTests.java @@ -264,7 +264,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;