
com.cerner.beadledom.client.jackson.AnnotatedObjectMapperProvider Maven / Gradle / Ivy
package com.cerner.beadledom.client.jackson;
import com.cerner.beadledom.guice.dynamicbindings.DynamicBindingProvider;
import com.cerner.beadledom.jackson.DeserializationFeatureFlag;
import com.cerner.beadledom.jackson.JsonGeneratorFeatureFlag;
import com.cerner.beadledom.jackson.JsonParserFeatureFlag;
import com.cerner.beadledom.jackson.MapperFeatureFlag;
import com.cerner.beadledom.jackson.SerializationFeatureFlag;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.google.inject.BindingAnnotation;
import com.google.inject.Inject;
import com.google.inject.Provider;
import java.lang.annotation.Annotation;
import java.util.Set;
/**
* A Guice provider for {@link ObjectMapper}.
*
* This provider uses the given {@link BindingAnnotation} to retrieve the configuration from the
* Guice injected {@link DynamicBindingProvider}s to build the {@link ObjectMapper}.
*
* @author Sundeep Paruvu
* @since 2.2
* @deprecated As of 3.6, use Retrofit (https://github.com/square/retrofit) instead.
*/
@Deprecated
class AnnotatedObjectMapperProvider implements Provider {
private final Class extends Annotation> clientBindingAnnotation;
private Set jacksonModules;
private Set serializationFeatureFlag;
private Set deserializationFeatureFlag;
private Set mapperFeatureFlag;
private Set jsonGeneratorFeatureFlag;
private Set jsonParserFeatureFlag;
AnnotatedObjectMapperProvider(Class extends Annotation> clientBindingAnnotation) {
this.clientBindingAnnotation = clientBindingAnnotation;
}
@Inject
void init(
DynamicBindingProvider> jacksonModules,
DynamicBindingProvider> serializationFeatureFlag,
DynamicBindingProvider> deserializationFeatureFlag,
DynamicBindingProvider> mapperFeatureFlag,
DynamicBindingProvider> jsonGeneratorFeatureFlag,
DynamicBindingProvider> jsonParserFeatureFlag) {
this.jacksonModules = jacksonModules.get(clientBindingAnnotation);
this.serializationFeatureFlag = serializationFeatureFlag.get(clientBindingAnnotation);
this.deserializationFeatureFlag = deserializationFeatureFlag.get(clientBindingAnnotation);
this.mapperFeatureFlag = mapperFeatureFlag.get(clientBindingAnnotation);
this.jsonGeneratorFeatureFlag = jsonGeneratorFeatureFlag.get(clientBindingAnnotation);
this.jsonParserFeatureFlag = jsonParserFeatureFlag.get(clientBindingAnnotation);
}
@Override
public ObjectMapper get() {
ObjectMapper objectMapper = new ObjectMapper();
// Sets default values before looking at bound features
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_ABSENT);
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
objectMapper.registerModules(jacksonModules);
for (SerializationFeatureFlag feature : serializationFeatureFlag) {
objectMapper.configure(feature.feature(), feature.isEnabled());
}
for (DeserializationFeatureFlag feature : deserializationFeatureFlag) {
objectMapper.configure(feature.feature(), feature.isEnabled());
}
for (MapperFeatureFlag feature : mapperFeatureFlag) {
objectMapper.configure(feature.feature(), feature.isEnabled());
}
for (JsonParserFeatureFlag feature : jsonParserFeatureFlag) {
objectMapper.configure(feature.feature(), feature.isEnabled());
}
for (JsonGeneratorFeatureFlag feature : jsonGeneratorFeatureFlag) {
objectMapper.configure(feature.feature(), feature.isEnabled());
}
return objectMapper;
}
}