Search code examples
jacksonjava-8java-timejackson-modules

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


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.


Solution

  • 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.

    JavaTimeModule Source at GitHub

    JavaTimeModule Usage