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) + +}