diff --git a/spring-cloud-function-context/pom.xml b/spring-cloud-function-context/pom.xml index f192b8989..3233746af 100644 --- a/spring-cloud-function-context/pom.xml +++ b/spring-cloud-function-context/pom.xml @@ -37,6 +37,16 @@ org.springframework spring-messaging + + org.springframework + spring-web + true + + + com.fasterxml.jackson.module + jackson-module-kotlin + true + org.springframework.boot spring-boot-configuration-processor diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/KotlinLambdaToFunctionAutoConfiguration.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/KotlinLambdaToFunctionAutoConfiguration.java index 18d131af5..36c0dd555 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/KotlinLambdaToFunctionAutoConfiguration.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/KotlinLambdaToFunctionAutoConfiguration.java @@ -22,6 +22,7 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import com.fasterxml.jackson.module.kotlin.KotlinModule; import kotlin.Unit; import kotlin.jvm.functions.Function0; import kotlin.jvm.functions.Function1; @@ -45,13 +46,18 @@ import org.springframework.beans.factory.config.ConstructorArgumentValues; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.cloud.function.context.FunctionRegistration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.ResolvableType; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.util.ObjectUtils; + + /** * Configuration class which defines the required infrastructure to bootstrap Kotlin * lambdas as invocable functions within the context of the framework. @@ -67,6 +73,19 @@ public class KotlinLambdaToFunctionAutoConfiguration { protected final Log logger = LogFactory.getLog(getClass()); + @Bean + @ConditionalOnMissingBean + @ConditionalOnClass(name = {"org.springframework.http.converter.json.Jackson2ObjectMapperBuilder", + "com.fasterxml.jackson.module.kotlin.KotlinModule"}) + Jackson2ObjectMapperBuilderCustomizer customizer() { + return new Jackson2ObjectMapperBuilderCustomizer() { + @Override + public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) { + jacksonObjectMapperBuilder.modulesToInstall(KotlinModule.class); + } + }; + } + /** * Will transform all discovered Kotlin's Function lambdas to java * Supplier, Function and Consumer, retaining the original Kotlin type