Is there a jackson datatype module for JDK8 java.time?
JacksonJava 8Java TimeJackson ModulesJackson Problem Overview
I'm looking for a module for the new JDK8 java.time classes. I have looked through the FasterXML GitHub Project Listing and presently found none.
As I understand Jackson is still being compiled against JDK6 so can not use these classes directly and must have this built as a separate module, as was required with Joda.
I don't mind starting the project, though looking to see if any other efforts were already underway.
Jackson Solutions
Solution 1 - Jackson
As already mentioned, Jackson-Datatype-JSR310 provides support for Java 8 Time.
Since Jackson 2.6.0 the "old" JSR310Module is deprecated. It is replaced by JavaTimeModule. Maven dependency is the same (you can find the current version in Maven Central):
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.6.0</version>
</dependency>
You have to register the module like this:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Or like this:
ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();
Or like this (since 2.10 possible):
ObjectMapper mapper = JsonMapper.builder()
.findAndAddModules()
.build();
> Note that as of 2.6, this module does NOT support auto-registration, because of existence of legacy version, JSR310Module. Legacy version has the same functionality, but slightly different default configuration: see com.fasterxml.jackson.datatype.jsr310.JSR310Module for details.
Solution 2 - Jackson
The most complete listing of datatype modules would be found from Jackson "portal" page at Github:
https://github.com/FasterXML/jackson
which does list "JSR-310: support for "Java 8 Dates". Naming is bit opaque, but it refers to the standardization process, via JSR that should be finalized to produce the new Java8 Date API (if it's not already final; process has taken a while).
Direct link is: https://github.com/FasterXML/jackson-datatype-jsr310
Solution 3 - Jackson
You just need to import the jsr310 module.
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.5.0</version>
</dependency>
If module auto scan is not enable in your project, you will need to register it:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());
Solution 4 - Jackson
If you use Spring Boot 2 and depends on the spring-boot-starter-web
starter, you would have as dependencies both : the deprecated (jackson-datatype-jsr310) and the actual (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
Solution 5 - Jackson
My bad, I was looking for a jackson-datatype-jdk8
as was for jackson-datatype-jdk7, however the project was actually created under the JSR name jackson-datatype-jsr310.
Solution 6 - Jackson
You should be able to use
ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();