in anomalymonitor/src/main/java/software/amazon/ce/anomalymonitor/Utils.java [25:58]
static {
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
// Use upper case in JSON key
OBJECT_MAPPER.setPropertyNamingStrategy(new PropertyNamingStrategy.UpperCamelCaseStrategy());
// SDK model has private field without getter/setter, make Jackson to use field directly
OBJECT_MAPPER.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
// Skip null or empty values when serializing to JSON
OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL);
OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
// SDK model has no default constructor, and build class is private.
// Add custom builder so Jackson can deserialize the class.
final Map<Class<?>, Class<?>> buildersMap = ImmutableMap.of(
Expression.class, Expression.serializableBuilderClass(),
DimensionValues.class, DimensionValues.serializableBuilderClass(),
TagValues.class, TagValues.serializableBuilderClass(),
CostCategoryValues.class, CostCategoryValues.serializableBuilderClass()
);
OBJECT_MAPPER.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {
private static final long serialVersionUID = 1L;
@Override
public Class<?> findPOJOBuilder(AnnotatedClass ac) {
if (buildersMap.containsKey(ac.getRawType())) {
return buildersMap.get(ac.getRawType());
}
return super.findPOJOBuilder(ac);
}
});
objectWriter = OBJECT_MAPPER.writerWithDefaultPrettyPrinter();
}