From 60308eab77f5f98a79f445cfb3a181bcb156f282 Mon Sep 17 00:00:00 2001 From: Veerendra Vellanki Date: Mon, 15 Jul 2024 13:10:38 -0500 Subject: [PATCH] register available modules with the object mapper add tests --- .../ai/converter/BeanOutputConverter.java | 4 +-- .../ai/converter/BeanOutputConverterTest.java | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/spring-ai-core/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java b/spring-ai-core/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java index 186176db3..5225a1ac7 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java @@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.github.victools.jsonschema.generator.SchemaGenerator; import com.github.victools.jsonschema.generator.SchemaGeneratorConfig; @@ -181,9 +182,8 @@ public class BeanOutputConverter implements StructuredOutputConverter { * @return Configured object mapper. */ protected ObjectMapper getObjectMapper() { - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = JsonMapper.builder().findAndAddModules().build(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.registerModule(new JavaTimeModule()); return mapper; } diff --git a/spring-ai-core/src/test/java/org/springframework/ai/converter/BeanOutputConverterTest.java b/spring-ai-core/src/test/java/org/springframework/ai/converter/BeanOutputConverterTest.java index 24cfd0a5c..de8354b4b 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/converter/BeanOutputConverterTest.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/converter/BeanOutputConverterTest.java @@ -15,6 +15,7 @@ */ package org.springframework.ai.converter; +import java.time.LocalDate; import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; @@ -60,6 +61,13 @@ class BeanOutputConverterTest { assertThat(testClass.getSomeString()).isEqualTo("some value"); } + @Test + public void convertClassWithDateType() { + var converter = new BeanOutputConverter<>(TestClassWithDateProperty.class); + var testClass = converter.convert("{ \"someString\": \"2020-01-01\" }"); + assertThat(testClass.getSomeString()).isEqualTo(LocalDate.of(2020, 1, 1)); + } + @Test public void convertTypeReference() { var converter = new BeanOutputConverter<>(new ParameterizedTypeReference() { @@ -255,6 +263,24 @@ class BeanOutputConverterTest { } + public static class TestClassWithDateProperty { + + private LocalDate someString; + + @SuppressWarnings("unused") + public TestClassWithDateProperty() { + } + + public TestClassWithDateProperty(LocalDate someString) { + this.someString = someString; + } + + public LocalDate getSomeString() { + return someString; + } + + } + public static class TestClassWithJsonAnnotations { @JsonProperty("string_property")