- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在日期逻辑方面遇到了一些问题,我已将其隔离到 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 question由 the 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
不是系统默认值,因为 documentation和 SO 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/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!