如何在使用基于Spring注解的configuration时configurationMappingJacksonHttpMessageConverter?

我没有足够的理由通过注释来configurationspring beans,而不是纯xml bean,现在我正面临着后果。

我使用configurationREST通道

<mvc:annotation-driven /> 

现在我只需MappingJacksonHttpMessageConverterconfiguration为MappingJacksonHttpMessageConverter输出具有非空值的字段。 我已经尝试了以下内容:

 <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> 

bean被创build,但另一个转换器实例被创build并在通道中使用。 所以我已经尝试了在这个Stackoverflow问题中描述的@Configuration@Bean的方式,但仍然json序列化使用它自己的configuration。

最后我试图通过注入映射器

 @Autowired private MappingJacksonHttpMessageConverter jacksonConverter; 

但是我已经结束了NoSuchBeanDefinitionException 。 所以现在我没有select,所以我在这里要求任何想法。 如何控制和configuration框架使用的映射器?

使用WebMvcConfigurer.configureMessageConverters()方法:

configurationHttpMessageConverters使用[…]如果没有消息转换器添加到列表中,则添加默认转换器。

使用@Configuration你有:

 @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; } } 

调用addDefaultHttpMessageConverters()是必需的,因为使用自定义转换器时不应用默认值。

重要说明如果要扩展WebMvcConfigurationSupport,则必须删除要configuration的转换器的@EnableWebMvc。

仅在java代码中定制spring mvc servletconfiguration可以通过多种方式实现。

最简单的一个似乎是用WebMvcConfigurerAdapter扩展你的@Configuration注释类:

 @Configuration @EnableWebMvc public class ApplicationSpringConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters( List<HttpMessageConverter<?>> converters ) { converters.add(converter()); } @Bean MappingJackson2HttpMessageConverter converter() { // [...] } } 

请注意,这很像Tomasz Nurkiewicz的答案所提供的例子。

但是,使用WebMvcConfigurationSupport而不是WebMvcConfigurerAdapter对于高级自定义更适合。 如果您还需要添加默认转换器,则是这种情况。

查看Spring文档定制提供的configuration