不合理,无法通过注释而不是纯XML Bean来配置Spring Bean,现在我正面临后果。
我使用以下方式配置REST通道
<mvc:annotation-driven />
现在,我只需要简单地将设置MappingJacksonHttpMessageConverter为仅将此具有非null值的字段输出到JSON。我尝试了以下方法:
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被创建,但是转换器的另一个实例已创建并在通道中使用。所以我已经尝试过这种方法@Configuration并@Bean在Stackoverflow问题中进行了描述,但是json序列化仍然使用其自己的配置。
@Configuration
@Bean
最后,我尝试通过注入注入映射器
@Autowired private MappingJacksonHttpMessageConverter jacksonConverter;
但是我已经结束了NoSuchBeanDefinitionException。所以现在我没有选择了,因此我想在这里提出任何想法。如何控制和配置框架使用的映射器?
NoSuchBeanDefinitionException
使用WebMvcConfigurer.configureMessageConverters()方法:
WebMvcConfigurer.configureMessageConverters()
配置HttpMessageConverters以使用[…]如果列表中未添加任何消息转换器,则默认添加转换器。
随着@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()需要调用to ,因为使用自定义转换器时未应用默认设置。
addDefaultHttpMessageConverters()
重要说明@EnableWebMvc如果扩展WebMvcConfigurationSupport,则 必须删除要配置的转换器。
@EnableWebMvc
WebMvcConfigurationSupport