diff --git a/src/main/java/org/springframework/data/repository/util/QueryExecutionConverters.java b/src/main/java/org/springframework/data/repository/util/QueryExecutionConverters.java index 680355093..bb038bc45 100644 --- a/src/main/java/org/springframework/data/repository/util/QueryExecutionConverters.java +++ b/src/main/java/org/springframework/data/repository/util/QueryExecutionConverters.java @@ -699,6 +699,10 @@ public abstract class QueryExecutionConverters { @Override public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { + if (sourceType.isAssignableTo(targetType)) { + return false; + } + if (!Iterable.class.isAssignableFrom(sourceType.getType())) { return false; } diff --git a/src/test/java/org/springframework/data/repository/util/QueryExecutionConvertersUnitTests.java b/src/test/java/org/springframework/data/repository/util/QueryExecutionConvertersUnitTests.java index 4c8dc2825..61db08297 100755 --- a/src/test/java/org/springframework/data/repository/util/QueryExecutionConvertersUnitTests.java +++ b/src/test/java/org/springframework/data/repository/util/QueryExecutionConvertersUnitTests.java @@ -355,6 +355,15 @@ public class QueryExecutionConvertersUnitTests { .containsExactly("foo"); } + @Test // DATACMNS-1484 + public void doesNotConvertCollectionToStreamableIfReturnTypeIsIterable() { + + List source = Arrays.asList("1", "2"); + + assertThat(conversionService.convert(source, Iterable.class)).isSameAs(source); + + } + interface Sample { Page pages();