繁体   English   中英

JDK8 java.time 是否有 jackson 数据类型模块?

[英]Is there a jackson datatype module for JDK8 java.time?

我正在为新的JDK8 java.time类寻找一个模块。 我浏览了FasterXML GitHub 项目列表,目前没有找到。

据我了解,Jackson 仍在针对 JDK6 进行编译,因此不能直接使用这些类,并且必须将其构建为单独的模块,正如 Joda 所要求的那样。

我不介意开始这个项目,尽管想看看是否还有其他工作正在进行中。

如前所述, Jackson-Datatype-JSR310提供对 Java 8 Time 的支持。

自 Jackson 2.6.0 起,“旧” JSR310Module 已弃用。 它被 JavaTimeModule 取代。 Maven 依赖是相同的(您可以在Maven Central 中找到当前版本):

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.6.0</version>
</dependency>

您必须像这样注册模块:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());

或者像这样:

ObjectMapper mapper = new ObjectMapper(); 
mapper.findAndRegisterModules();

或者像这样(从 2.10 开始可能):

ObjectMapper mapper = JsonMapper.builder()
        .findAndAddModules()
        .build();

请注意,从 2.6 开始,此模块不支持自动注册,因为存在旧版本 JSR310Module。 旧版具有相同的功能,但默认配置略有不同:请参阅 com.fasterxml.jackson.datatype.jsr310。 JSR310 模块了解详情。

GitHub 上的 JavaTimeModule 源

JavaTimeModule 用法

最完整的数据类型模块列表可以从 Github 的 Jackson“门户”页面找到:

https://github.com/FasterXML/jackson

其中确实列出了“JSR-310:对“Java 8 日期”的支持。命名有点不透明,但它指的是标准化过程,通过 JSR 应该最终确定以生成新的 Java8 日期 API(如果它还不是最终的;过程花了一段时间)。

直接链接是: https : //github.com/FasterXML/jackson-datatype-jsr310

如果您使用 Spring Boot 2 并依赖于spring-boot-starter-web starter,那么您将同时拥有以下依赖项:不推荐使用的 (jackson-datatype-jsr310) 和实际的 (jackson-datatype-jdk8)。

[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.0.0.M3:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-json:jar:2.0.0.M3:compile
[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.0.pr4:compile
[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.0.pr4:compile

您只需要导入jsr310 模块

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.5.0</version>
</dependency>

如果您的项目中没有启用模块自动扫描,您需要注册它:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());

我的不好,我正在寻找jackson-datatype-jdk8jackson-datatype-jdk7 一样,但是该项目实际上是在 JSR 名称jackson-datatype-jsr310下创建的。

你应该可以使用

ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM