Spring接口JSON反序列化带时区日期报错 如何正确配置日期字段?
问题根因
你收到的报错核心原因是接口返回的日期字符串 2021-09-10T21:48:35.352+0000 末尾的 +0000 为时区偏移标识,而你使用的 LocalDateTime 类型本身不包含时区信息,Jackson 默认反序列化规则无法识别这部分后缀,因此会在索引23的位置抛出解析失败错误。
解决方案
方案1:使用带时区的日期类型(推荐)
直接将字段类型替换为原生支持时区偏移解析的 OffsetDateTime 或 ZonedDateTime,无需额外配置格式即可完成反序列化:
@JsonProperty("processedAt") private OffsetDateTime processedAt;
如果后续业务需要转换为本地时区的 LocalDateTime,可通过如下方式转换:
LocalDateTime localTime = processedAt.atZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime();
方案2:保留LocalDateTime类型,新增格式注解
如果业务不需要保留时区信息,只想直接解析为LocalDateTime,可以添加@JsonFormat注解指定匹配的日期格式与时区:
@JsonProperty("processedAt") @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "GMT+8") // timezone按业务实际需要的时区填写 private LocalDateTime processedAt;
注:SpringBoot 项目的
spring-boot-starter-web默认已经引入jackson-datatype-jsr310依赖,无需额外手动引入即可支持 Java8 时间类的序列化/反序列化。
内容的提问来源于stack exchange,提问作者challengeAccepted
相关产品推荐
相关产品推荐

