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

Spring Boot PUT请求中Java 8 LocalDateTime字段为Null的问题

解决Spring Boot中LocalDateTime字段反序列化后为Null的问题

你遇到的问题核心是Jackson核心库与JSR310时间模块的版本不匹配,再加上缺少明确的字段格式注解,导致LocalDateTime的反序列化逻辑没有生效——Jackson默认对无法解析的字段不会抛出异常,而是静默赋值为null,这就是为什么你看不到报错但字段始终为null的原因。下面是一步步的解决方案:

1. 统一Jackson依赖版本

你的jackson-databind版本是2.9.5,但处理Java 8时间类型的jackson-datatype-jsr310模块版本是2.8.4,版本不一致会导致模块无法被Jackson核心库正确加载,自然无法处理LocalDateTime的反序列化。

修改依赖,让两个版本保持完全一致:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.5</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.9.5</version> <!-- 和databind版本统一 -->
</dependency>

2. 给POJO字段添加@JsonFormat注解

在modifyDate字段上添加@JsonFormat注解,明确指定日期格式,给Jackson提供清晰的解析规则,双重保障反序列化生效:

@Column
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
LocalDateTime modifyDate;

3. 确认自定义ObjectMapper的有效性

你已经通过@Primary注解确保自定义的ObjectMapper被Spring优先使用,并且注册了JavaTimeModule、禁用了时间戳序列化,这部分配置是正确的。如果想简化配置,也可以去掉手动创建的ObjectMapper Bean,改用Spring Boot的自动配置,在application.properties中添加:

# 指定日期格式
spring.jackson.date-format=yyyy-MM-dd'T'HH:mm:ss.SSS
# 禁用时间戳序列化
spring.jackson.serialization.write-dates-as-timestamps=false
# 自动注册JSR310模块
spring.jackson.modules=com.fasterxml.jackson.datatype.jsr310.JavaTimeModule

验证测试

修改完成后重启服务,发送你的测试请求:

[ { "id": 2, "description": "test2", "modifyDate": "2018-05-07T16:13:04.597", "modifyUser": "me" } ]

此时modifyDate字段应该能被正确解析为LocalDateTime对象,不再是null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:42:08