【发布时间】:2015-06-16 18:31:42
【问题描述】:
我正在使用the Jackson Datatype JSR310 page 描述的库,但我仍然难以让它工作。
我已经配置了以下bean:
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());
return mapper;
}
当我调用我的 REST API 时,日期格式输出为 yyyy-MM-dd'T'HH:ss.SSSSSS,例如2015-04-11T00:10:38.905847。这可以由我的 AngularJS 代码处理。
当我想向 REST API 提交内容时,日期会发布为 yyyy-MM-dd'T'HH:mm:ss.SSS'Z',例如2015-04-09T08:30:00.000Z
杰克逊最后一直在抱怨“Z”。如果我查看文档中的LocalDateTimeDeserializer,它使用DateTimeFormatter.ISO_LOCAL_DATE_TIME,它归结为ISO_LOCAL_DATE'T'ISO_LOCAL_TIME,并提到它没有覆盖区域。
所以我想我应该在我正在创建的ObjectMapper 上设置DateFormat:
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
return mapper;
}
但这无济于事。我将其更改为yyyy-MM-dd 之类的简单名称,但序列化日期仍为以前的格式,反序列化也不受影响。
我在这里做错了什么才能使其正常工作?据我所知,我的 JavaScript 代码中的日期格式是 ISO 8601 格式...
【问题讨论】:
-
我认为如果你切换到 ZoneDateTime 可能会起作用。
-
@AlexeyGavrilov,这确实有效,谢谢。如果您将其作为答案提交,我会将其标记为正确。仍然觉得奇怪的是,在 objectmapper 本身上设置 dateFormat 对序列化/反序列化绝对没有影响,但使用 ZonedDateTime 很容易:-)
-
ObjectMapper 的 DateFormat 仅用于内置 java.util.Date 支持,我猜。将带有时区指示的值传递给 LocalDateTime 是一种气味- Instant 或 OffsetDateTime(甚至 ZonedDateTime)更适用。
标签: java jackson java-time jsr310