I was unreasonable enough to went into configuring spring beans via annotations and not pure xml beans and now I'm facing the consequences.
I configure REST channels using
<mvc:annotation-driven />
Now I want simply configure the MappingJacksonHttpMessageConverter
to output to JSON only this fields that have non-null values. I've tried the following:
<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="prefixJson" value="false" /> <property name="supportedMediaTypes" value="application/json" /> <property name="objectMapper"> <bean class="org.codehaus.jackson.map.ObjectMapper"> <property name="serializationInclusion" value="NON_NULL"/> </bean> </property> </bean>
The beans gets created, but another instance of converter is created and used in channels. So I've tried the way with @Configuration
and @Bean
described in this Stackoverflow question, but still json serialization uses its own configuration.
Finally I've tried to inject the mapper via
@Autowired private MappingJacksonHttpMessageConverter jacksonConverter;
but I've ended with NoSuchBeanDefinitionException
. So now I'm out of options and therefore I'm asking for any ideas here. How to controll and configure the mapper used by framework?
HttpMessageConverter is a strategy interface that specifies a converter that can convert from and to HTTP requests and responses in Spring REST Restful web services. Internally Spring MVC uses it to convert the Http request to an object representation and back.
Interface WebMvcConfigurer. Defines callback methods to customize the Java-based configuration for Spring MVC enabled via @EnableWebMvc . @EnableWebMvc -annotated configuration classes may implement this interface to be called back and given a chance to customize the default configuration.
Use the WebMvcConfigurer.configureMessageConverters()
method:
Configure the HttpMessageConverters to use [...] If no message converters are added to the list, default converters are added instead.
With @Configuration
you have:
@Configuration class MvcConf extends WebMvcConfigurationSupport { protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(converter()); addDefaultHttpMessageConverters(converters); } @Bean MappingJacksonHttpMessageConverter converter() { MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter() //do your customizations here... return converter; } }
Call to addDefaultHttpMessageConverters()
is required because the defaults are not applied when using custom converters.
IMPORTANT NOTE You must remove @EnableWebMvc
for your converters to be configured if you extend WebMvcConfigurationSupport.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With