Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (or disable `MapperFeature.REQUIRE_HANDLERS_FOR_JAVA8_TIMES`) (through reference chain: java.util.ImmutableCollections$ListN[0]->java.util.HashMap["时间"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.19.0.jar:2.19.0]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1359) ~[jackson-databind-2.19.0.jar:2.19.0]
at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:34) ~[jackson-databind-2.19.0.jar:2.19.0]
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:868) ~[jackson-databind-2.19.0.jar:2.19.0]
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:759) ~[jackson-databind-2.19.0.jar:2.19.0]
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:719) ~[jackson-databind-2.19.0.jar:2.19.0]
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:34) ~[jackson-databind-2.19.0.jar:2.19.0]
at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) ~[jackson-databind-2.19.0.jar:2.19.0]
这个错误已经提示的很明白了:jackson 不支持 Java8 的 OffsetDateTime 类型。
Java 8 date/time type
java.time.OffsetDateTime
not supported by default: add Module “com.fasterxml.jackson.datatype:jackson-datatype-jsr310” to enable handling
以下是 AI 的回答:
针对Gradle项目中java.time.OffsetDateTime
的序列化问题,需结合Gradle依赖管理和Jackson模块配置解决:
-
添加依赖配置
在build.gradle
文件的dependencies
块中添加JSR-310模块依赖:implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.0'
该模块专为Java 8日期/时间类型提供支持。
-
配置ObjectMapper
在项目初始化时注册JavaTimeModule
并禁用时间戳格式:ObjectMapper mapper = new ObjectMapper() .registerModule(new JavaTimeModule()) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
此配置确保日期以ISO-8601字符串格式(如
2025-08-20T15:53:03+08:00
)序列化。 -
Spring Boot集成(可选)
若使用Spring Boot,可通过application.properties
全局配置:spring.jackson.serialization.write-dates-as-timestamps=false
或通过
@Bean
自定义ObjectMapper
。 -
字段级格式化
对特定字段使用@JsonFormat
注解精细化控制:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ssXXX") private OffsetDateTime eventTime;
支持自定义时区和显示格式。
注意事项:
- 确保Gradle配置的依赖版本与项目其他Jackson组件(如
jackson-core
)版本一致 - 多模块项目中需在主模块或共享库中统一配置
ObjectMapper
- 测试时验证日期字段的序列化结果是否符合预期格式
我感觉就是源码里没有注册 registerModule(new JavaTimeModule()) 这样呢,
那这个还不好改呢,我看了看这个 JmixPivotTableSerializer
不是一个 bean。
如果你着急用,可以先自己创建一个带简单DateTime 的 DTO,然后把你要显示的数据做映射。Pivottable 就显示这个 DTO集合。
英文论坛也提了个问:Add support for OffsetDateTime in Pivottable - Support - Jmix