我正在为新的JDK8 java.time类寻找一个模块。我查看了FasterXML GitHub 项目列表,目前没有找到。
据我了解,Jackson 仍在针对 JDK6 进行编译,因此不能直接使用这些类,并且必须按照 Joda 的要求将其构建为单独的模块。
我不介意开始这个项目,但我想看看是否已经在进行其他努力。
我正在为新的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。JSR310Module了解详情。
最完整的数据类型模块列表可以从 Github 的 Jackson“门户”页面找到:
https://github.com/FasterXML/jackson
其中列出了“JSR-310:对“Java 8 Dates”的支持。命名有点不透明,但它指的是标准化过程,通过 JSR 应该最终确定以产生新的 Java8 Date API(如果它还不是最终的;过程花了一段时间)。
您只需要导入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());
如果您使用 Spring Boot 2 并依赖于spring-boot-starter-web
启动器,那么您将同时拥有以下依赖项:不推荐使用的 (jackson-datatype-jsr310) 和实际的 (jackson-datatype-jdk8)。
[信息] +- org.springframework.boot:spring-boot-starter-web:jar:2.0.0.M3:compile [信息] | +- org.springframework.boot:spring-boot-starter-json:jar:2.0.0.M3:compile [信息] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.0.pr4:compile [信息] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.0.pr4:compile
jackson-datatype-jdk8
我的错,我一直在寻找jackson-datatype-jdk7 的原样,但是该项目实际上是在 JSR 名称jackson-datatype-jsr310下创建的。
你应该可以使用
ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();