diff --git a/pom.xml b/pom.xml
index 941d24ebdea..f73140cb459 100644
--- a/pom.xml
+++ b/pom.xml
@@ -169,6 +169,7 @@
1.0.0-beta.10
1.1.0
4.31.1
+ 1.9.25
2.26.7
@@ -313,6 +314,37 @@
maven-site-plugin
${maven-site-plugin.version}
+
+ org.jetbrains.kotlin
+ kotlin-maven-plugin
+ ${kotlin.version}
+
+
+ compile
+
+ compile
+
+
+
+ ${project.basedir}/src/main/kotlin
+ ${project.basedir}/src/main/java
+
+
+
+
+ test-compile
+
+ test-compile
+
+
+
+ ${project.basedir}/src/test/kotlin
+ ${project.basedir}/src/test/java
+
+
+
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -323,6 +355,32 @@
-parameters
+
+
+
+ default-compile
+ none
+
+
+
+ default-testCompile
+ none
+
+
+ java-compile
+ compile
+
+ compile
+
+
+
+ java-test-compile
+ test-compile
+
+ testCompile
+
+
+
org.apache.maven.plugins
diff --git a/spring-ai-core/pom.xml b/spring-ai-core/pom.xml
index 8322b5f665c..afc1b760b74 100644
--- a/spring-ai-core/pom.xml
+++ b/spring-ai-core/pom.xml
@@ -140,6 +140,20 @@
test
+
+ org.jetbrains.kotlin
+ kotlin-stdlib
+ ${kotlin.version}
+ test
+
+
+
+ com.fasterxml.jackson.module
+ jackson-module-kotlin
+ ${jackson.version}
+ test
+
+
diff --git a/spring-ai-core/src/test/kotlin/org/springframework/ai/utils/JacksonUtilsKotlinTests.kt b/spring-ai-core/src/test/kotlin/org/springframework/ai/utils/JacksonUtilsKotlinTests.kt
new file mode 100644
index 00000000000..465bbe9dfb0
--- /dev/null
+++ b/spring-ai-core/src/test/kotlin/org/springframework/ai/utils/JacksonUtilsKotlinTests.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2023-2024 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import com.fasterxml.jackson.databind.json.JsonMapper
+import org.assertj.core.api.Assertions
+import org.junit.jupiter.api.Test
+import org.springframework.ai.util.JacksonUtils
+
+/**
+ * Kotlin unit tests for [JacksonUtils].
+ *
+ * @author Sebastien Deleuze
+ */
+class JacksonUtilsKotlinTests {
+
+ @Test
+ fun `Deserialize to a Kotlin data class with Jackson modules detected by JacksonUtils#instantiateAvailableModules`() {
+ val jsonMapper = JsonMapper.builder().addModules(JacksonUtils.instantiateAvailableModules()).build()
+ val output = jsonMapper.readValue("{\"name\":\"Robert\",\"age\":42}", User::class.java)
+ Assertions.assertThat(output).isEqualTo(User("Robert", 42))
+ }
+
+ @Test
+ fun `Serialize a Kotlin data class with Jackson modules detected by JacksonUtils#instantiateAvailableModules`() {
+ val jsonMapper = JsonMapper.builder().addModules(JacksonUtils.instantiateAvailableModules()).build()
+ val output = jsonMapper.writeValueAsString(User("Robert", 42))
+ Assertions.assertThat(output).isEqualTo("{\"name\":\"Robert\",\"age\":42}")
+ }
+
+ data class User(val name: String, val age: Int)
+
+}