gpt4 book ai didi

java - @JsonFormat DEFAULT_TIMEZONE 似乎不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:12 26 4
gpt4 key购买 nike

我在日期逻辑方面遇到了一些问题,我已将其隔离到 JSON 序列化程序 Jackson。

在数据库和应用程序的调试点中,日期是正确的,所有内容都是使用默认时区编写的。但是,在连载中增加了 4 小时。我发现这可以通过特别告诉 Jackson 使用 EST(它默认为 UTC)来补救。如下:

@JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss.SSSZ", timezone="America/New_York")
private Date startDate;

但是,问题是只有本地使用 EST 而服务器将使用 UTC。我需要 Jackson 使用系统默认值。

幸运的是,我找到了this similar questionthe documentation 支持.新解决方案:

@JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss.SSSZ", timezone=JsonFormat.DEFAULT_TIMEZONE)
private Date startDate;

然而,它不起作用!我也尝试了 timezone='DEFAULT_TIMEZONE' 和其他各种方法,但在所有情况下,api 输出似乎仍然比数据库中的数字早 4 小时。

我尝试过的其他事情:

  • 注销 JsonFormat.DEFAULT_TIMEZONE 返回 ##default
  • 记录 TimeZone.getDefault().getDisplayName() 返回 东部标准时间

Jackson 版本为 2.9。

有什么建议吗?

最佳答案

解决了我自己的问题。这是我发现的:

JsonFormat.DEFAULT_TIMEZONE 不是系统默认值,因为 documentationSO answer建议,但实际上默认为 UTC。

org.springframework.http.converter.json.Jackson2ObjectMapperBuilder

/**
* Override the default {@link TimeZone} to use for formatting.
* Default value used is UTC (NOT local timezone).
* @since 4.1.5
*/
public Jackson2ObjectMapperBuilder timeZone(TimeZone timeZone) {

com.fasterxml.jackson.annotation.JsonFormat

/**
* Value that indicates that default {@link java.util.TimeZone}
* (from deserialization or serialization context) should be used:
* annotation does not define value to use.
*<p>
* NOTE: default here does NOT mean JVM defaults but Jackson databindings
* default, usually UTC, but may be changed on <code>ObjectMapper</code>.
*/
public final static String DEFAULT_TIMEZONE = "##default";

解决方案:

@Autowired
com.fasterxml.jackson.databind.ObjectMapper objectMapper;

objectMapper.setTimeZone(TimeZone.getDefault()) 在配置类中,如下所示:

package path.to.config;
import ...

@Configuration
public class JacksonConfiguration {

@Autowired
public JacksonConfiguration(ObjectMapper objectMapper){
objectMapper.setTimeZone(TimeZone.getDefault());
}
}

这应该将 Jackson ObjectMapper 设置为使用系统默认值而不是 Jackson 默认值 (UTC)。

关于java - @JsonFormat DEFAULT_TIMEZONE 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55224233/

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