package com.cassiomolin.example.common.api.provider; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; import javax.ws.rs.ext.ContextResolver; import javax.ws.rs.ext.Provider; /** * JAX-RS provider for Jackson's {@link ObjectMapper}. * * @author cassiomolin */ @Provider public class ObjectMapperProvider implements ContextResolver<ObjectMapper> { private final ObjectMapper mapper; public ObjectMapperProvider() { mapper = createObjectMapper(); } @Override public ObjectMapper getContext(Class<?> type) { return mapper; } private static ObjectMapper createObjectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Jdk8Module()); mapper.registerModule(new JavaTimeModule()); mapper.registerModule(new ParameterNamesModule()); mapper.enable(SerializationFeature.INDENT_OUTPUT); mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT); return mapper; } }