All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.crabshue.commons.json.serialization.ObjectMapperBuilder Maven / Gradle / Ivy

The newest version!
package com.crabshue.commons.json.serialization;

import com.crabshue.commons.json.serialization.serializers.JSR310DateTimeSerializer;
import com.crabshue.commons.json.serialization.serializers.JSR310LocalDateDeserializer;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.NonNull;

import java.time.*;
import java.util.ArrayList;
import java.util.List;

import static com.fasterxml.jackson.module.kotlin.ExtensionsKt.jacksonObjectMapper;

/**
 * Builder for {@link ObjectMapper}.
 */
public class ObjectMapperBuilder {

    /**
     * Get a new instance of the builder.s
     *
     * @return a builder.
     */
    public static ObjectMapperBuilder builder() {

        return new ObjectMapperBuilder();
    }

    private List serializationInclusions = new ArrayList<>();

    private ObjectMapperBuilder() {
    }

    /**
     * Configure the {@link ObjectMapper} with a {@link JsonInclude.Include serialization inclusion rule}.
     *
     * @param serializationInclusion the serialization inclusion rule.
     * @return the builder.
     */
    public ObjectMapperBuilder withSerializationInclusion(@NonNull final JsonInclude.Include serializationInclusion) {

        this.serializationInclusions.add(serializationInclusion);
        return this;
    }

    /**
     * Build the configured {@link ObjectMapper}.
     *
     * @return the object mapper.o
     */
    public ObjectMapper build() {

        final ObjectMapper ret = jacksonObjectMapper();


        final JavaTimeModule module = new JavaTimeModule();
        module.addSerializer(OffsetDateTime.class, JSR310DateTimeSerializer.INSTANCE);
        module.addSerializer(ZonedDateTime.class, JSR310DateTimeSerializer.INSTANCE);
        module.addSerializer(LocalDateTime.class, JSR310DateTimeSerializer.INSTANCE);
        module.addSerializer(Instant.class, JSR310DateTimeSerializer.INSTANCE);
        module.addDeserializer(LocalDate.class, JSR310LocalDateDeserializer.INSTANCE);

        ret.registerModule(module);

        this.serializationInclusions.forEach(ret::setSerializationInclusion);

        return ret;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy