SpringBoot WebMvcConfigurationSupport не принимает configureMessageConverters, когда мы получаем бин в - PullRequest
0 голосов
/ 11 февраля 2019

В 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 не берет нашпреобразователи.

Но когда мы объявляем все в методе, 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

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

У меня была борьба с WebMVC и RestAPI.Как только @EnableWebMvc, он переопределит spring.jackson.* config.

Мое решение, получите текущий 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));
    }
}
0 голосов
/ 11 февраля 2019

Я нашел одно решение.Расширяет WebMvcConfigurerAdapter и реализует extendMessageConverters, очищает конвертеры и устанавливает только те конвертеры, которые мне нужны.

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

    return jacksonConverter;
}

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