Reputation: 63
In WebMvcConfigurationSupport
child class we override the method configureMessageConverters
.
When we get one converters like a bean,
@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());
}
the configuration-loader
didn't take our converters.
But when we declare all in the method, the configuration-loader
take our converters.
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new Jaxb2RootElementHttpMessageConverter());
converters.add(new MappingJackson2HttpMessageConverter(new EventServiceObjectMapper()));
}
It's normal? I miss something?
Dependencies ::
Spring webmvc 4.3.22.RELEASE
SpringBoot 1.5.19.RELEASE
Upvotes: 1
Views: 1780
Reputation: 372
I was struggle with WebMVC and RestAPI. Once @EnableWebMvc
, it will override spring.jackson.*
config.
My solution, get current MappingJackson2HttpMessageConverter
and custom it that I want.
@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));
}
}
Upvotes: 1
Reputation: 63
I found one solution. Extends the WebMvcConfigurerAdapter, and implements extendMessageConverters, clear the converters and set only converters I want.
@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());
}
Upvotes: 0