目前我的Spring Boot App中有一个<d:Style.DataContext>
配置:
@Bean
是否可以为API的不同部分使用不同的ObjectMapper?
我感兴趣的是,例如,为API的不同部分提供不同的属性命名策略。我希望我的API的一部分(例如@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
return mapper;
}
)与/api/v1/snake/**
及其中的一部分(例如SNAKE_CASE
)一起使用/api/v1/camel/**
。
谢谢!
答案 0 :(得分:1)
如果API
的两个部分都没有处理相同的域对象,那么您可以通过提供覆盖{{1}的MappingJackson2HttpMessageConverter
的{{1}}实现来实现此目标。 }和canRead
方法。这里是一个使用必须序列化的对象的基础包的例子:
自定义转换器:
canWrite
<强>配置强>
public class CustomConverter extends MappingJackson2HttpMessageConverter {
private String basePackage;
public CustomConverter(String basePackage) {
this.basePackage = basePackage;
}
@Override
public boolean canRead(Type type, Class<?> contextClass, MediaType mediaType) {
if (contextClass.getName().startsWith(basePackage)) {
return super.canRead(type, contextClass, mediaType);
}
return false;
}
@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
if (clazz.getName().startsWith(basePackage)) {
return super.canWrite(clazz, mediaType);
}
return false;
}
}