diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/JsonMessageConverter.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/JsonMessageConverter.java index 2f8b17846..9746ee983 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/JsonMessageConverter.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/JsonMessageConverter.java @@ -18,7 +18,6 @@ package org.springframework.cloud.function.context.config; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; -import java.util.Collection; import org.springframework.cloud.function.cloudevent.CloudEventMessageUtils; import org.springframework.cloud.function.json.JsonMapper; @@ -76,9 +75,6 @@ public class JsonMessageConverter extends AbstractMessageConverter { @Override protected Object convertFromInternal(Message message, Class targetClass, @Nullable Object conversionHint) { - if (targetClass.isInstance(message.getPayload()) && !(message.getPayload() instanceof Collection)) { - return message.getPayload(); - } Type convertToType = conversionHint == null ? targetClass : (Type) conversionHint; if (targetClass == byte[].class && message.getPayload() instanceof String) { return ((String) message.getPayload()).getBytes(StandardCharsets.UTF_8); diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java index fedbe5e98..30caee18b 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java @@ -45,6 +45,9 @@ public class SmartCompositeMessageConverter extends CompositeMessageConverter { @Nullable public Object fromMessage(Message message, Class targetClass) { for (MessageConverter converter : getConverters()) { + if (targetClass.isInstance(message.getPayload()) && !(message.getPayload() instanceof Collection)) { + return message.getPayload(); + } Object result = converter.fromMessage(message, targetClass); if (result != null) { return result; @@ -57,6 +60,9 @@ public class SmartCompositeMessageConverter extends CompositeMessageConverter { @Nullable public Object fromMessage(Message message, Class targetClass, @Nullable Object conversionHint) { for (MessageConverter converter : getConverters()) { + if (targetClass.isInstance(message.getPayload()) && !(message.getPayload() instanceof Collection)) { + return message.getPayload(); + } Object result = (converter instanceof SmartMessageConverter ? ((SmartMessageConverter) converter).fromMessage(message, targetClass, conversionHint) : converter.fromMessage(message, targetClass)); diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistryTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistryTests.java index 9cdc5eb79..175de78e5 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistryTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistryTests.java @@ -49,6 +49,7 @@ import org.springframework.cloud.function.context.FunctionType; import org.springframework.cloud.function.context.HybridFunctionalRegistrationTests.UppercaseFunction; import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; import org.springframework.cloud.function.context.config.JsonMessageConverter; +import org.springframework.cloud.function.context.config.SmartCompositeMessageConverter; import org.springframework.cloud.function.json.GsonMapper; import org.springframework.cloud.function.json.JacksonMapper; import org.springframework.cloud.function.json.JsonMapper; @@ -87,7 +88,7 @@ public class SimpleFunctionRegistryTests { messageConverters.add(new JsonMessageConverter(jsonMapper)); messageConverters.add(new ByteArrayMessageConverter()); messageConverters.add(new StringMessageConverter()); - this.messageConverter = new CompositeMessageConverter(messageConverters); + this.messageConverter = new SmartCompositeMessageConverter(messageConverters); this.conversionService = new DefaultConversionService(); }