diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java index dbfe13e49..ffef18541 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java @@ -1067,7 +1067,7 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect } } else { - convertedInput = this.convertNonMessageInputIfNecessary(type, input, JsonMapper.isJsonString(input) || input instanceof Map); + convertedInput = this.convertNonMessageInputIfNecessary(type, input, JsonMapper.isJsonString(input)); if (convertedInput != null && logger.isDebugEnabled()) { logger.debug("Converted input: " + input + " to: " + convertedInput); } diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java index 47318beb8..74d93d7fa 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -526,6 +527,18 @@ public class BeanFactoryAwareFunctionRegistryTests { registry.register(e); } + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Test + public void testNoConversionOnInputMapIfInputIsMap() { + FunctionCatalog catalog = this.configureCatalog(); + Function f = catalog.lookup("maptopojo"); + Person p = new Person("John", 123); + Map map = new HashMap<>(); + map.put("person", p); + map.put("foo", "foo"); + assertThat(f.apply(map)).isInstanceOf(Person.class); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) @Test public void testValueWrappedInMessageIfNecessary() { @@ -930,7 +943,7 @@ public class BeanFactoryAwareFunctionRegistryTests { @Bean public Function, Person> maptopojo() { return map -> { - Person person = new Person((String) map.get("name"), Integer.parseInt((String) map.get("id"))); + Person person = (Person) map.get("person"); return person; }; }