作者:克阳光沫沫的幸福 | 来源:互联网 | 2023-05-19 12:12
为Spring 创建自定义ObjectMapper很容易,但配置需要XML.我正在尝试减少真正不会改变的事情的XML配置量,而无需重新部署我的整个系统.
所以标题说明了一切 - 我可以使用注释或其他非XML方法来告诉Spring,"嘿,请使用我的自定义对象映射器"?
编辑:
这似乎不起作用
@Configuration
@EnableWebMvc
public class AppConfig {
@Primary
@Bean
public ObjectMapper mapper(){
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
mapper.registerModule(new JodaModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return mapper;
}
}
编辑2:
我不相信Spring正在使用我的 ObjectMapper.我有这个代码:
@Primary
@Bean
public ObjectMapper mapper(){
ObjectMapper mapper = new ObjectMapper();
JodaModule mod = new JodaModule();
mod.addSerializer(DateTime.class, new JsonSerializer() {
@Override
public void serialize(DateTime dateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
System.out.println("Hi, bob");
}
});
mapper.registerModule(mod);
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.enable(SerializationFeature.INDENT_OUTPUT);
return mapper;
}
但是当我设置一个断点时,System.out.println("Hi, bob")
它永远不会被调用 - 虽然我肯定会序列化一个DateTime.