From 5876bd2e5ac546404a98563db9039283dcd0e2a7 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 25 Sep 2020 14:41:54 +0200 Subject: [PATCH] DATACMNS-1762 - Consider reactive types as wrappers during method introspection. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now perform type unwrapping and introspection for reactive types for method return types and method arguments after decoupling QueryExecutionConverters.supports(…) from ReactiveWrapperConverters. --- .../core/support/AbstractRepositoryMetadata.java | 3 ++- .../springframework/data/repository/query/Parameter.java | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadata.java b/src/main/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadata.java index a02d4c7ab..e79af5b61 100644 --- a/src/main/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadata.java +++ b/src/main/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadata.java @@ -113,7 +113,8 @@ public abstract class AbstractRepositoryMetadata implements RepositoryMetadata { return ReactiveWrapperConverters.unwrapWrapperTypes(returnType).getType(); } - return QueryExecutionConverters.unwrapWrapperTypes(returnType).getType(); + return ReactiveWrapperConverters.unwrapWrapperTypes(QueryExecutionConverters.unwrapWrapperTypes(returnType)) + .getType(); } /* diff --git a/src/main/java/org/springframework/data/repository/query/Parameter.java b/src/main/java/org/springframework/data/repository/query/Parameter.java index 04c21ba9f..faca4ba02 100644 --- a/src/main/java/org/springframework/data/repository/query/Parameter.java +++ b/src/main/java/org/springframework/data/repository/query/Parameter.java @@ -30,6 +30,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.repository.util.ClassUtils; import org.springframework.data.repository.util.QueryExecutionConverters; +import org.springframework.data.repository.util.ReactiveWrapperConverters; import org.springframework.data.util.ClassTypeInformation; import org.springframework.data.util.Lazy; import org.springframework.data.util.TypeInformation; @@ -228,7 +229,8 @@ public class Parameter { TypeInformation bound = parameterTypes.getTypeArguments().get(0); TypeInformation returnType = ClassTypeInformation.fromReturnTypeOf(method); - return bound.equals(QueryExecutionConverters.unwrapWrapperTypes(returnType)); + return bound + .equals(ReactiveWrapperConverters.unwrapWrapperTypes(QueryExecutionConverters.unwrapWrapperTypes(returnType))); } /** @@ -239,7 +241,8 @@ public class Parameter { * @see QueryExecutionConverters */ private static boolean isWrapped(MethodParameter parameter) { - return QueryExecutionConverters.supports(parameter.getParameterType()); + return QueryExecutionConverters.supports(parameter.getParameterType()) + || ReactiveWrapperConverters.supports(parameter.getParameterType()); } /**