JacksonAdapter.java

package io.github.pojotools.flat2pojo.jackson;

import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

/**
 * Jackson integration utilities for flat2pojo.
 *
 * <p>This class provides pre-configured Jackson ObjectMapper instances and utilities optimized for
 * flat2pojo's conversion process.
 */
public final class JacksonAdapter {

  private JacksonAdapter() {
    throw new UnsupportedOperationException("Utility class");
  }

  /**
   * Creates a Jackson ObjectMapper with optimized settings for flat2pojo.
   *
   * <p>The returned mapper is configured with:
   *
   * <ul>
   *   <li>JavaTimeModule for java.time support
   *   <li>ISO-8601 date formatting (not timestamps)
   *   <li>Case-insensitive enum handling
   *   <li>Unknown property tolerance
   * </ul>
   *
   * @return a pre-configured ObjectMapper instance
   */
  public static ObjectMapper defaultObjectMapper() {
    return JsonMapper.builder()
        // Register module for java.time types
        .addModule(new JavaTimeModule())

        // ISO-8601 instead of timestamps for dates
        .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)

        // Allow case-insensitive enums
        .enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS)

        // Ignore unknown fields instead of failing
        .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
        .build();
  }
}