Spring MVC、MessageConverters、代码配置被忽略
Spring MVC, MessageConverters, Code Configuration Ignored
我正在混合使用 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 转换为字符串表示形式,而是返回了整个对象结构。
为什么会被忽略?
结合使用 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 />
我正在混合使用 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 转换为字符串表示形式,而是返回了整个对象结构。
为什么会被忽略?
结合使用 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 />