一尘不染

在使用基于Spring注释的配置时如何配置MappingJacksonHttpMessageConverter?

spring

不合理,无法通过注释而不是纯XML Bean来配置Spring Bean,现在我正面临后果。

我使用以下方式配置REST通道

<mvc:annotation-driven />

现在,我只需要简单地将设置MappingJacksonHttpMessageConverter为仅将此具有非null值的字段输出到JSON。我尝试了以下方法:

<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序列化仍然使用其自己的配置。

最后,我尝试通过注入注入映射器

@Autowired
private MappingJacksonHttpMessageConverter jacksonConverter;

但是我已经结束了NoSuchBeanDefinitionException。所以现在我没有选择了,因此我想在这里提出任何想法。如何控制和配置框架使用的映射器?


阅读 497

收藏
2020-04-12

共1个答案

一尘不染

使用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 ,因为使用自定义转换器时未应用默认设置。

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

2020-04-12