Skip to content

Java 8 date/time type java.time.Duration not supported by default #2820

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
newzhiMing opened this issue Apr 21, 2025 · 5 comments
Open

Java 8 date/time type java.time.Duration not supported by default #2820

newzhiMing opened this issue Apr 21, 2025 · 5 comments

Comments

@newzhiMing
Copy link

Caused by: org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class java.time.Duration]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:489)
at org.springframework.http.converter.AbstractGenericHttpMessageConverter.writeInternal(AbstractGenericHttpMessageConverter.java:123)
at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:235)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitterReturnValueHandler$HttpMessageConvertingHandler.sendInternal(ResponseBodyEmitterReturnValueHandler.java:221)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitterReturnValueHandler$HttpMessageConvertingHandler.send(ResponseBodyEmitterReturnValueHandler.java:212)
at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.sendInternal(ResponseBodyEmitter.java:223)
... 8 common frames omitted
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type java.time.Duration not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: org.springframework.ai.chat.model.ChatResponse["metadata"]->org.springframework.ai.chat.metadata.ChatResponseMetadata["rateLimit"]->org.springframework.ai.chat.metadata.EmptyRateLimit["tokensReset"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1330)
at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:502)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:341)
at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1574)
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1061)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:483)
... 13 common frames omitted

@dev-jonghoonpark
Copy link
Contributor

Could you please share your related code?

@newzhiMing
Copy link
Author

yes,thanks! `@PostMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@operation(summary = "chat")
public Flux chat() throws InterruptedException {
ChatClient.ChatClientRequestSpec chat = chatClient.prompt(
new Prompt("hello!!!", options));
Flux chatResponseFlux = chat.stream().chatResponse();
return chatResponseFlux;
}

`
environment:spring ai 1.0.0-M7 springboot 3.3.4

@dev-jonghoonpark
Copy link
Contributor

  • Which model are you using?
  • How did you initialize the options object?

It worked fine with the Anthropic model.

@newzhiMing
Copy link
Author

The name of the model I use is gpt-4o-2024-11-20, which is one of the many models of GPT。
OpenAiChatOptions options = OpenAiChatOptions.builder().model("gpt-4o-2024-11-20").build();
I don't think the problem is that it comes out of the model, but that I return to the Flux.I think the reason may be that there is a type Duration in the property of object ChatResponse, which is an error reported by the json handler during serialization, but it cannot be solved by configuring the ObjectMapper.The ObjectMapper code I configured is as follows (it doesn't work):
@Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); return mapper; }
Thank you, seniors!

@newzhiMing
Copy link
Author

Thanks seniors, I solved it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants