繁体   English   中英

如何在春季启动时强制Jackson2ObjectMapperBuilder?

[英]How to force Jackson2ObjectMapperBuilder in spring-boot?

我要创建自己的jackson ObjectMapper bean,如下所示:

@SpringBootApplication
@AutoConfigureBefore(JacksonAutoConfiguration.class) //even this does not help
public class MyConfig extends SpringBootServletInitializer {
    @Bean
    @Primary
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        return builder.createXmlMapper(true).build(); //much more configurations
    }
}

问题:永远不会创建该bean,而是执行默认的JacksonAutoConfiguration

package org.springframework.boot.autoconfigure.jackson;

@Configuration
@ConditionalOnClass(ObjectMapper.class)
public class JacksonAutoConfiguration {
        @Bean
        @Primary
        @ConditionalOnMissingBean(ObjectMapper.class)
        public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
            return builder.createXmlMapper(false).build(); //this is always executed!
        }
}

因此,当评估JacksonAutoConfiguration时, ObjectMapper bean还不存在。 但为什么?

通过使用断点进行调试,我还可以看到从未调用我的bean! 但是我注意到的是:即使我有@AutoConfigureBefore ,杰克逊自动配置仍在MyConfig任何bean 之前运行。 奇怪?

这是针对定制ObjectMapper Spring文档,它的含义是:

如果要完全替换默认的ObjectMapper,请定义该类型的@Bean并将其标记为@Primary ,或者,如果您更喜欢基于构建器的方法,请定义Jackson2ObjectMapperBuilder @Bean 请注意,无论哪种情况,这都会禁用ObjectMapper的所有自动配置。

如果定义ObjectMapper bean没有帮助,您可以尝试定义Jackson2ObjectMapperBuilder bean吗?

另外,您可以尝试将bean定义为带有@Configuration注释的类吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM