Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在spring boot中强制Jackson2ObjectMapperBuilder?_Java_Spring_Spring Boot_Jackson - Fatal编程技术网

Java 如何在spring boot中强制Jackson2ObjectMapperBuilder?

Java 如何在spring boot中强制Jackson2ObjectMapperBuilder?,java,spring,spring-boot,jackson,Java,Spring,Spring Boot,Jackson,我想创建自己的jacksonObjectMapperbean,如下所示: @SpringBootApplication @AutoConfigureBefore(JacksonAutoConfiguration.class) //even this does not help public class MyConfig extends SpringBootServletInitializer { @Bean @Primary public ObjectMapper jac

我想创建自己的
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
,但jackson autoconfig仍然在
MyConfig
中的任何bean之前运行。奇怪?

Spring为定制的
ObjectMapper
编写的文档中说:

如果要完全替换默认的ObjectMapper,请选择 定义该类型的
@Bean
,并将其标记为
@Primary
,或者,如果您愿意的话 基于构建器的方法是定义Jackson2ObjectMapperBuilder
@Bean
。请注意,在任何一种情况下,这都将禁用所有 ObjectMapper的自动配置

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


另外,您是否可以尝试将bean定义到一个用
@Configuration
注释的类中?

只是为了澄清:您将调试器断点放在那里,它从未被调用,对吗?确切地说,我的
ObjectMapper
bean完全被忽略了(对于同一
MyConfig
类中的所有其他bean来说,情况并非如此。您能为您的问题提供更多的上下文吗?从您所展示的内容来看,不清楚是否应该使用
MyConfig
。您的应用程序是作为jar、war、IDE中的其他东西运行的吗?如果它有一个jar、war或其他东西,那么它的主要方法是什么样子的呢会让事情更清楚。结果我不得不将bean定义移动到它自己的
@Configuration
类中。我不知道如果在main
SpringBootApplication
类中,为什么会跳过它?也许
@SpringBootApplication
没有扩展
@Configuration
注释/接口?无论如何,你可以标记答案如果它对你有帮助,那就被接受了。