首页 > 解决方案 > 当我们进入 bean 时,SpringBoot WebMvcConfigurationSupport 没有使用 configureMessageConverters

问题描述

WebMvcConfigurationSupport子类中,我们覆盖了方法configureMessageConverters

当我们得到一个像豆子一样的转换器时,

@Bean
public HttpMessageConverter mappingJackson2HttpMessageConverter(){
    MappingJackson2HttpMessageConverter jacksonConverter =
            new MappingJackson2HttpMessageConverter(new EventServiceObjectMapper());

    return jacksonConverter;
}

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(new Jaxb2RootElementHttpMessageConverter());
    converters.add(mappingJackson2HttpMessageConverter());
}

configuration-loader没有带我们的转换器。

但是,当我们在方法中声明 all 时,configuration-loader会使用我们的转换器。

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(new Jaxb2RootElementHttpMessageConverter());
    converters.add(new MappingJackson2HttpMessageConverter(new EventServiceObjectMapper()));
}

这是正常的?我想念什么?

依赖::

Spring webmvc 4.3.22.RELEASE

SpringBoot 1.5.19.RELEASE

标签: javaspring-bootspring-mvcconverters

解决方案


我在 WebMVC 和 RestAPI 上苦苦挣扎。一旦@EnableWebMvc,它将覆盖spring.jackson.*配置。

我的解决方案,获取MappingJackson2HttpMessageConverter我想要的最新和自定义它。

@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
    private ObjectMapper mapper;

    @Autowired  // spring.jackson.* ObjectMapper's config
    public WebConfig(ObjectMapper mapper) {
        this.mapper = mapper;
    }

    @Override
    public void extendMessageConverters (List<HttpMessageConverter<?>> converters) {
        converters.stream()
                .filter(x -> x instanceof  MappingJackson2HttpMessageConverter)
                .forEach(x -> ((MappingJackson2HttpMessageConverter) x).setObjectMapper(mapper));
    }
}

推荐阅读