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

POST请求时java.time.OffsetDateTime反序列化失败报错如何解决?

报错原因
  • 你配置的@JsonFormat时间格式为yyyy-MM-dd HH:mm:ss,但请求传入的时间字符串用T作为日期和时间的分隔符,格式不匹配
  • OffsetDateTime类型本身要求时间字符串带时区偏移信息,你传入的字符串无偏移值,无法直接反序列化
解决方案

方案1:适配现有入参格式,保留OffsetDateTime类型

如果业务需要使用带时区的时间类型,调整注解配置匹配入参,同时指定默认时区:

// pattern改为匹配带T的格式,timezone替换为你实际使用的时区,比如UTC、Asia/Shanghai
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "Asia/Shanghai")
private OffsetDateTime createDate = null;

@JsonProperty("finish_date")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "Asia/Shanghai")
private OffsetDateTime finishDate = null;

如果调整注解后仍然报错,确认项目已引入JSR310时间序列化模块:

<!-- 非SpringBoot项目需手动引入,SpringBoot自带spring-boot-starter-web已默认集成 -->
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

方案2:调整字段类型为LocalDateTime(改动最小)

如果业务不需要时区偏移特性,直接把字段类型从OffsetDateTime改为LocalDateTime,无需额外配置时区,仅调整时间格式即可:

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime createDate = null;

@JsonProperty("finish_date")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime finishDate = null;

方案3:要求调用方传入带时区偏移的时间

如果业务要求严格使用带时区的OffsetDateTime,要求调用方传入的时间字符串携带时区偏移,示例格式为2021-04-08T05:00:25+08:00,对应注解配置调整为:

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX")
private OffsetDateTime createDate = null;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:15:07