package com.aol.micro.server.jackson;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.aol.micro.server.PluginLoader;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
@Component
public class CoreJacksonConfigurator implements JacksonMapperConfigurator {
private final Optional<Include> inc;
@Autowired
public CoreJacksonConfigurator(@Value("${jackson.serialization:NON_NULL}")Include inc){
this.inc = Optional.ofNullable(inc);
}
public void accept(ObjectMapper mapper) {
JaxbAnnotationModule module = new JaxbAnnotationModule();
// configure as necessary
inc.map(include->mapper.setSerializationInclusion(include));
mapper.registerModule(module);
PluginLoader.INSTANCE.plugins.get().stream()
.filter(m -> m.jacksonModules()!=null)
.flatMap(m -> m.jacksonModules().stream())
.forEach(m -> mapper.registerModule(m));
mapper.registerModule(new Jdk8Module());
}
}