如何在使用基于Spring注解的configuration时configurationMappingJacksonHttpMessageConverter?
我没有足够的理由通过注释来configurationspring beans,而不是纯xml bean,现在我正面临着后果。
我使用configurationREST通道
<mvc:annotation-driven />
现在我只需MappingJacksonHttpMessageConverter
configuration为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