diff --git a/models/spring-ai-anthropic/pom.xml b/models/spring-ai-anthropic/pom.xml
index 732ae38fa..13c57803c 100644
--- a/models/spring-ai-anthropic/pom.xml
+++ b/models/spring-ai-anthropic/pom.xml
@@ -1,6 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
org.springframework.ai
@@ -78,11 +79,9 @@
com.fasterxml.jackson.dataformat
jackson-dataformat-xml
-
2.11.1
test
-
-
+
\ No newline at end of file
diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java
index 179c7121a..05a89117c 100644
--- a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java
+++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java
@@ -48,7 +48,9 @@ public abstract class AbstractMessage implements Message {
protected AbstractMessage(MessageType messageType, String textContent, Map metadata) {
Assert.notNull(messageType, "Message type must not be null");
- Assert.notNull(textContent, "Content must not be null");
+ if (messageType == MessageType.SYSTEM || messageType == MessageType.USER) {
+ Assert.notNull(textContent, "Content must not be null for SYSTEM or USER messages");
+ }
this.messageType = messageType;
this.textContent = textContent;
this.metadata = new HashMap<>(metadata);
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 5225a1ac7..c267e06f5 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
@@ -15,8 +15,17 @@
*/
package org.springframework.ai.converter;
+import static com.github.victools.jsonschema.generator.OptionPreset.PLAIN_JSON;
+import static com.github.victools.jsonschema.generator.SchemaVersion.DRAFT_2020_12;
+
+import java.lang.reflect.Type;
import java.util.Objects;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.lang.NonNull;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.core.util.DefaultIndenter;
@@ -25,21 +34,11 @@ 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;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder;
import com.github.victools.jsonschema.module.jackson.JacksonModule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.springframework.core.ParameterizedTypeReference;
-import org.springframework.lang.NonNull;
-import java.lang.reflect.Type;
-
-import static com.github.victools.jsonschema.generator.OptionPreset.PLAIN_JSON;
-import static com.github.victools.jsonschema.generator.SchemaVersion.DRAFT_2020_12;
/**
* An implementation of {@link StructuredOutputConverter} that transforms the LLM output
@@ -64,7 +63,7 @@ public class BeanOutputConverter implements StructuredOutputConverter {
/**
* The target class type reference to which the output will be converted.
*/
- @SuppressWarnings({ "FieldMayBeFinal", "rawtypes" })
+ @SuppressWarnings({ "FieldMayBeFinal"})
private TypeReference typeRef;
/** The object mapper used for deserialization and other JSON operations. */
@@ -182,8 +181,9 @@ public class BeanOutputConverter implements StructuredOutputConverter {
* @return Configured object mapper.
*/
protected ObjectMapper getObjectMapper() {
- ObjectMapper mapper = JsonMapper.builder().findAndAddModules().build();
+ ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ mapper.registerModule(new JavaTimeModule());
return mapper;
}