in costcategory/src/main/java/software/amazon/ce/costcategory/CostCategoryParser.java [27:65]
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.<Class<?>, Class<?>>builder()
.put(CostCategoryRule.class, CostCategoryRule.serializableBuilderClass())
.put(Expression.class, Expression.serializableBuilderClass())
.put(DimensionValues.class, DimensionValues.serializableBuilderClass())
.put(TagValues.class, TagValues.serializableBuilderClass())
.put(CostCategoryValues.class, CostCategoryValues.serializableBuilderClass())
.put(CostCategoryInheritedValueDimension.class, CostCategoryInheritedValueDimension.serializableBuilderClass())
.put(CostCategorySplitChargeRule.class, CostCategorySplitChargeRule.serializableBuilderClass())
.put(CostCategorySplitChargeRuleParameter.class, CostCategorySplitChargeRuleParameter.serializableBuilderClass())
.build();
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();
}