Skip to content

GoodforGod/jackson-datetime-configuration

Repository files navigation

Jackson DateTime Configuration

Java CI Quality Gate Status Coverage Maintainability Rating Lines of Code

Jackson DateTime module for java.time.* package with proper Configuration.

Library try to fix poor standard Jackson JSR310 DateTime module, now you can change formatters for Date/Times and library is using ISO8601 with millis precision formatters by default.

Features:

  • Default configuration with formatters ISO8601 with millis precision
  • Module configuration with getter\setters (can easily be used in framework configurations)

Dependency 🚀

Compatible with Java 8+.

Gradle

dependencies {
    implementation "io.goodforgod:jackson-datetime-configuration:2.0.0"
}

Maven

<dependency>
    <groupId>io.goodforgod</groupId>
    <artifactId>jackson-datetime-configuration</artifactId>
    <version>2.0.0</version>
</dependency>

Configuration

JavaTimeModule library provides uses same Package.VERSION as Jackson Module, this is done on purpose cause modules are exclusive.

Example how to create JavaTimeModuleConfiguration with ISO8601 with millis precision formatters:

JavaTimeModuleConfiguration configuration = new JavaTimeModuleConfiguration();

Example of all available configurations for JavaTimeModuleConfiguration.

JavaTimeModuleConfiguration configuration = new JavaTimeModuleConfiguration()
                    .setInstantFormat("uuuu-MM-dd")                                     // Set Instant formatter
                    .setOffsetTimeFormat("HH:mm:ss[.SSS]XXX")                           // Set OffsetTime formatter
                    .setOffsetDateTimeFormat("uuuu-MM-dd'T'HH:mm:ss[.SSS]XXX")          // Set OffsetDateTime formatter
                    .setZonedDateTimeFormat("uuuu-MM-dd'T'HH:mm:ss[.SSS]XXX['['VV']']") // Set ZonedDateTime formatter
                    .setLocalDateTimeFormat("uuuu-MM-dd'T'HH:mm:ss[.SSS]")              // Set LocalDateTime formatter
                    .setLocalDateFormat("uuuu-MM-dd")                                   // Set LocalDate formatter
                    .setLocalTimeFormat("HH:mm:ss[.SSS]XXX")                            // Set LocalTime formatter
                    .setYearFormat("uuuu")                                              // Set Year formatter
                    .setYearMonthFormat("uuuu-MM")                                      // Set YearMonth formatter
                    .setMonthDayFormat("MM-dd")                                         // Set MonthDay formatter
                    .setForceIsoChronology(true)                                        // Forces IsoChronology for all formatters
                    .setForceResolverStrict(true);                                      // Forces ResolverStyle#STRICT for all formatters

Module

Example how to create configuration, module and register module for ObjectMapper.

JavaTimeModuleConfiguration configuration = new JavaTimeModuleConfiguration();
configuration.setLocalTimeFormat("HH-mm-ss");

JavaTimeModule module = configuration.getModule();

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

Hints

For proper Date & Times serialization, you probably don't want to adjust ZoneOffset when deserializing and serializing as longs, then configure ObjectMapper as follows:

ObjectMapper mapper = new ObjectMapper()
        .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)               // Don't write dates as longs
        .configure(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE, false);    // Don't change ZoneOffset to local

License

This project licensed under the Apache License 2.0 - see the LICENSE file for details.