diff --git a/src/main/java/org/springframework/data/repository/query/ReturnedType.java b/src/main/java/org/springframework/data/repository/query/ReturnedType.java index 0878ed150..822bcc44e 100644 --- a/src/main/java/org/springframework/data/repository/query/ReturnedType.java +++ b/src/main/java/org/springframework/data/repository/query/ReturnedType.java @@ -283,6 +283,11 @@ public abstract class ReturnedType { PreferredConstructorDiscoverer discoverer = new PreferredConstructorDiscoverer(type); PreferredConstructor constructor = discoverer.getConstructor(); + + if (constructor == null) { + return Collections.emptyList(); + } + List properties = new ArrayList(); for (PreferredConstructor.Parameter parameter : constructor.getParameters()) { diff --git a/src/test/java/org/springframework/data/repository/query/ReturnedTypeUnitTests.java b/src/test/java/org/springframework/data/repository/query/ReturnedTypeUnitTests.java index 7846ffe81..a37521ef0 100644 --- a/src/test/java/org/springframework/data/repository/query/ReturnedTypeUnitTests.java +++ b/src/test/java/org/springframework/data/repository/query/ReturnedTypeUnitTests.java @@ -130,6 +130,17 @@ public class ReturnedTypeUnitTests { assertThat(type.getTypeToRead(), is(typeCompatibleWith(BigInteger.class))); } + /** + * @see DATACMNS-840 + */ + @Test + public void detectsSampleDtoWithDefaultConstructor() throws Exception { + + ReturnedType type = getReturnedType("dtoWithMultipleConstructors"); + + assertThat(type.getInputProperties(), is(empty())); + } + private static ReturnedType getReturnedType(String methodName, Class... parameters) throws Exception { return getQueryMethod(methodName, parameters).getResultProcessor().getReturnedType(); } @@ -162,6 +173,8 @@ public class ReturnedTypeUnitTests { Page findPageProjection(Pageable pageable); BigInteger countQuery(); + + SampleDtoWithMultipleConstructors dtoWithMultipleConstructors(); } static class Sample { @@ -180,6 +193,13 @@ public class ReturnedTypeUnitTests { } } + static class SampleDtoWithMultipleConstructors { + + SampleDtoWithMultipleConstructors(String firstname) {} + + SampleDtoWithMultipleConstructors(int age) {} + } + interface SampleProjection { String getLastname();