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

se.fortnox.reactivewizard.json.JsonSerializerFactory Maven / Gradle / Ivy

package se.fortnox.reactivewizard.json;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.ser.BeanSerializerFactory;
import com.fasterxml.jackson.databind.ser.SerializerFactory;

import javax.inject.Inject;
import java.lang.reflect.Type;
import java.util.function.Function;

/**
 * Creates instances of JSON serializers.
 */
public class JsonSerializerFactory {
    private final ObjectMapper mapper;

    @Inject
    public JsonSerializerFactory(ObjectMapper mapper) {
        this.mapper = mapper.setSerializerFactory(mapper.getSerializerFactory()
                .withSerializerModifier(new LambdaSerializerModifier()));
    }

    public JsonSerializerFactory() {
        this(new ObjectMapper()
            .findAndRegisterModules()
            .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
            .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false));
    }

    public  Function createStringSerializer(TypeReference paramType) {
        return createStringSerializer(mapper.writerFor(paramType));
    }

    public  Function createStringSerializer(Class paramType) {
        return createStringSerializer(mapper.writerFor(paramType));
    }

    public  Function createStringSerializer(Type type) {
        return createStringSerializer(Types.toReference(type));
    }

    private  Function createStringSerializer(ObjectWriter writer) {
        return object -> {
            if (object == null) {
                return null;
            }
            try {
                return writer.writeValueAsString(object);
            } catch (Exception e) {
                throw new InvalidJsonException(e);
            }
        };
    }

    public  Function createByteSerializer(TypeReference paramType) {
        return createByteSerializer(mapper.writerFor(paramType));
    }

    public  Function createByteSerializer(Class paramType) {
        return createByteSerializer(mapper.writerFor(paramType));
    }

    private  Function createByteSerializer(ObjectWriter writer) {
        return object -> {
            if (object == null) {
                return null;
            }
            try {
                return writer.writeValueAsBytes(object);
            } catch (Exception e) {
                throw new InvalidJsonException(e);
            }
        };
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy