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

Spring Boot 4集成Jackson 3时OffsetDateTime时区转换全局配置失效问题

Spring Boot 4 Web Client中OffsetDateTime时区转换全局配置问题

Spring Boot 4对日期处理相关逻辑做了大幅重构,在Web Client场景下,使用OffsetDateTime类型时默认会将其转换为UTC时区。我希望禁用这一默认行为,但尝试的全局配置并未生效,仅在字段上添加@JsonFormat(without = JsonFormat.Feature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE, with = {})注解才能保留原始时区偏移。

复现场景

接口接收的JSON数据

{
  "data": {
    "id": 1,
    "content": "Hello, test!",
    "createdAt": "2026-04-19T08:30:00-04:00",
    "createdAt2": "2026-04-19T08:30:00-04:00"
  }
}

控制器方法

@GetMapping("/data")
public DataRecord getData() {
    return dataClient.getData();
}

HTTP Client接口定义

@HttpExchange(url = "http://localhost:3000")
public interface DataClient {

    @GetExchange("/data")
    DataRecord getData();
}

数据实体Record类

public record DataRecord(
    @JsonProperty("id") Long id,
    @JsonProperty("content") String content,
    @JsonFormat(without = JsonFormat.Feature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE, with = {})
    @JsonProperty("createdAt") OffsetDateTime createdAt,
    @JsonProperty("createdAt2") OffsetDateTime createdAt2
) {}

全局配置(application.properties)

# Old way
#spring.jackson.deserialization.adjust-dates-to-context-time-zone=false
# New way
spring.jackson.datatype.datetime.adjust-dates-to-context-time-zone=false
spring.jackson.datatype.datetime.write-dates-with-context-time-zone=false

当前现象

调用控制器后返回结果如下:

{
  "id": 1,
  "content": "Hello, test!",
  "createdAt": "2026-04-19T08:30:00-04:00",
  "createdAt2": "2026-04-19T12:30:00Z"
}

createdAt字段因添加了注解保留了原始时区偏移,但createdAt2仍被转换为UTC时区,全局配置未生效。

需求

是否存在无需为每个OffsetDateTime字段添加注解的全局配置方案,来禁用默认的UTC转换行为?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 05:14:53