
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