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



我正在使用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;
    }
}

i在Spring MVC应用程序的启动时调试configureMessageConverters()方法,并执行它。尽管如此,控制器中我的JSON响应并未将Joda localdate转换为字符串表示,而是将整个对象结构归还。

为什么被忽略?

使用基于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 />

最新更新