gpt4 book ai didi

java - 使用 Spring Boot 自动转换 RequestBody 期间,ZonedDateTime 的时区更改为 UTC

转载 作者:行者123 更新时间:2023-12-02 09:14:38 73 4
gpt4 key购买 nike

我试图保留在前端设置的 ZonedDateTime 的 ZoneId,同时对 Spring Boot Controller 执行 POST/PUT。

我要传输的值是:2019-05-01T00:00:00+01:00[欧洲/萨格勒布]

POST/PUT 后,ZoneId 将转换为 UTC,并调整小时数。从技术上讲,这个更新的值代表时间线上的同一点,但原始的 ZoneId 丢失了,我希望将其存储起来以便稍后能够将其显示给最终用户。

// DTO
public class PriceInfoDTO {
@JsonFormat( pattern = "yyyy-MM-dd'T'HH:mm:ssXXX['['VV']']",
with = JsonFormat.Feature.WRITE_DATES_WITH_ZONE_ID )
@DateTimeFormat( pattern = "yyyy-MM-dd'T'HH:mm:ssXXX['['VV']']", iso = ISO.DATE_TIME )
private ZonedDateTime validFrom;
}


// Controller
@PutMapping(
path = PATH + "/{id}",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<PriceInfo> update(
@PathVariable("id") final Integer id,
@RequestBody final PriceInfoDTO dto
) {
System.out.println(dto);
...
}

查看浏览器中的“网络”选项卡,从浏览器到 Spring Controller 的请求具有以下值(有效负载):

2019-05-01T00:00:00+01:00[Europe/Zagreb]

与格式模式相同。

当我将 DTO 转储到控制台时,我得到以下结果:

2019-04-30T22:00Z[UTC]

有什么方法可以保留在请求中收到的 ZoneId 吗?我应该编写自己的序列化器和反序列化器来实现此目的吗?

谢谢!

最佳答案

将以下行添加到 application.properties 文件中:

spring.jackson.deserialization.ADJUST_DATES_TO_CONTEXT_TIME_ZONE = false
<小时/>

引用文献:

关于java - 使用 Spring Boot 自动转换 RequestBody 期间,ZonedDateTime 的时区更改为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097664/

73 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com