Spring MVC,MessageConverters,代码配置被忽略

时间:2017-06-01 19:01:06

标签: java spring-mvc jackson jodatime jackson-modules

我使用了xml和基于代码的配置。我的代码配置的一部分被忽略了。这一个:

@Configuration
@EnableWebMvc
public class RestMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(converter());
        super.configureMessageConverters(converters);
    }

    @Bean
    public MappingJackson2HttpMessageConverter converter() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JodaModule());
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(mapper);

        return converter;
    }
}

我在启动Spring MVC应用程序时调试configureMessageConverters()方法,然后执行。尽管如此,我在控制器中的JSON响应并没有将Joda LocalDate转换为String表示,而是返回整个对象结构。

为什么会被忽略?

1 个答案:

答案 0 :(得分:0)

使用xml和基于代码的配置的组合,在两次配置一件事情的情况下很容易结束,使Spring覆盖以前的配置。在我的例子中,这是由于MVC也在xml中配置:

<context:component-scan base-package="uk.co.imperatives.billing.rest" />
<mvc:annotation-driven />
<context:annotation-config />

因此,在这种情况下,xml配置重置了我的代码配置。删除<mvc:annotation-driven />修复了问题。所以,这很有效:

<context:component-scan base-package="uk.co.imperatives.billing.rest" />
<context:annotation-config />