Spring Boot自动配置的ObjectMapper以及其他ObjectMapper

时间:2018-12-10 14:52:47

标签: java spring spring-boot jackson spring-web

我们当前正在尝试使用spring自动配置或创建其Jackson ObjectMapper来实现JSON日志记录库。我们的目标是不覆盖类JacksonAutoConfiguration中的spring自动配置,以便不会禁用日志库的客户端的每次自定义。

实际的弹簧行为是基于bean的,我们的主要问题是JacksonProperties无法为我们定制和重用。如果我们实际上添加了另一个JacksonProperties bean,则应用程序启动将会失败,因为JacksonAutoConfiguration.Jackson2ObjectMapperBuilderCustomizerConfiguration.class将无法处理另一个bean。 (Spring Boot内部的未标记为@Primary。)

所以我们要做的是开始重新实现每个bean,例如构建器,定制器等。但这不是很容易维护,因为它复制了框架代码。

我们现在的问题是,是否有任何方法可以适应为杰克逊对象映射器bean创建数据源的方式。下面是创建数据源的一个示例。

@Bean(name = "testDataSource")
@ConfigurationProperties(prefix = "test.datasource")
public HikariDataSource naeDataSource(DataSourceProperties testDataSourceProperties) {
    return testDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}

我们知道问题仍然在于,重写对象映射器将使其停用,但是如果您注意应用程序上下文,则提供多个对象映射器实例会容易得多。

还是到目前为止我们还没有找到任何更简便的方法?

使用的版本: 春季启动2.0.5。发布

更新

我分叉了spring boot项目,对Spring Boot Autoconfiguration模块做了一些更改,还建立了一个小型演示项目。我不认为这是理想的方法,但是通过此更改,可以从配置属性轻松初始化自己的对象映射器。例如,您现在可以轻松地为五个不同的其余模板和通过REST-API调用的客户端创建五个对象映射器。

@ConfigurationProperties(prefix = "logging.jackson")
@Bean("loggingJacksonProperties")
public JacksonProperties loggingJacksonProperties() {
    return new JacksonProperties();
}

@Bean
public ObjectMapper secondObjectMapper(@Qualifier("loggingJacksonProperties") JacksonProperties loggingJacksonProperties) {
    return loggingJacksonProperties.initializeJackson2ObjectMapperBuilder().build();
}

比较叉:https://github.com/spring-projects/spring-boot/compare/2.1.x...mixaaaa:feature/jackson_properties_initializer

演示项目:https://github.com/mixaaaa/jackson-demo

0 个答案:

没有答案