【发布时间】:2016-12-29 09:56:55
【问题描述】:
我有一个带有 Spring Boot 和 Jetty 的简单应用程序。我有一个简单的控制器,它返回一个具有 Java 8 ZonedDateTime 的对象:
public class Device {
// ...
private ZonedDateTime lastUpdated;
public Device(String id, ZonedDateTime lastUpdated, int course, double latitude, double longitude) {
// ...
this.lastUpdated = lastUpdated;
// ...
}
public ZonedDateTime getLastUpdated() {
return lastUpdated;
}
}
在我的RestController 中,我只有:
@RequestMapping("/devices/")
public @ResponseBody List<Device> index() {
List<Device> devices = new ArrayList<>();
devices.add(new Device("321421521", ZonedDateTime.now(), 0, 39.89011333, 24.438176666));
return devices;
}
我原以为 ZonedDateTime 会根据 ISO 格式进行格式化,但我却得到了类的整个 JSON 转储,如下所示:
"lastUpdated":{"offset":{"totalSeconds":7200,"id":"+02:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"zone":{"id":"Europe/Berlin","rules":{"fixedOffset":false,"transitionRules":[{"month":"MARCH","timeDefinition":"UTC","standardOffset":{"totalSeconds":3600,"id":"+01:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"offsetBefore":{"totalSeconds":3600,"id":"+01:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"offsetAfter":{"totalSeconds":7200,"id":"+02:00", ...
我只有一个spring-boot-starter-web 应用程序,使用spring-boot-starter-jetty 并排除spring-boot-starter-tomcat。
为什么 Jackson 在 Spring Boot 中会这样?
** 更新 **
对于那些寻找完整的分步指南如何解决这个问题的人,我在提出问题后发现了这一点: http://lewandowski.io/2016/02/formatting-java-time-with-spring-boot-using-json/
【问题讨论】:
-
如果你真的想让事情变得简单而不是让下一个阅读你的代码的人绊倒,只需将你的 List
转换为 List -
好吧,如果你使用 Spring Boot,一半的事情是神奇的,如果配置错误,可能会让你绊倒。自从我发布此问题以来,JSR310 配置已成为您必须为 Java 8 Time 支持所做的“标准”样板。也许将来 Jackson 库会默认这样做。
标签: java json spring-boot jackson zoneddatetime