You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java8迁移Java11后LocalDateTime JSON反序列化失败求助

问题分析与解决方案

问题原因

从Java 8迁移到Java 11后,Jackson解析LocalDateTime字段失败,核心原因是Java 8时间API(JSR310)对应的Jackson模块未正确引入或注册,导致@JsonFormat注解的格式化规则未生效。Jackson默认解析器不识别yyyy-MM-dd HH:mm:ss格式中的空格分隔符,因此抛出解析异常。

解决步骤

1. 引入匹配版本的Jackson时间模块

检查项目依赖,确保添加jackson-datatype-jsr310,且版本与jackson-databind(你的项目中为2.15.2)保持一致:

Maven依赖:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.15.2</version>
</dependency>

Gradle依赖:

implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2'

2. 手动注册JavaTimeModule(必要场景)

如果是Spring Boot项目,通常会自动注册该模块,但部分自定义场景下需手动配置ObjectMapper:

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 注册JSR310时间模块
        objectMapper.registerModule(new JavaTimeModule());
        // 禁用日期默认序列化为时间戳的行为
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        return objectMapper;
    }
}

3. 完善@JsonFormat注解(可选但推荐)

添加时区参数,避免因时区差异引发的潜在问题:

@Schema(
        name = "shopOrderDate",
        example = "2018-10-04 12:24:06",
        title = "The timestamp when this order was created.",
        required = true)
@NotNull
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime shopOrderDate;

4. 测试环境适配

JUnit测试中,确保测试上下文加载了上述Jackson配置,或在测试类中手动注入配置好的ObjectMapper进行序列化/反序列化操作。


内容的提问来源于stack exchange,提问作者Stieg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:32:25