我想将一个自定义的HttpMessageConverter添加到弹簧数据休息的spring-boot应用程序中,但事实证明我有几个地方要注入我的消息转换器。作为此情况的参考项目,请https://github.com/olivergierke/spring-restbucks。
我可以通过将其放入基本配置类Restbucks.java来添加我的消息转换器:
@Bean
public RepositoryRestConfigurer repositoryRestConfigurer() {
return new RepositoryRestConfigurerAdapter() {
@Override
public void configureHttpMessageConverters(
List<HttpMessageConverter<?>> messageConverters) {
messageConverters.add(0, myMessageConverter());
}
};
}
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> messageConverters) {
messageConverters.add(0, myMessageConverter());
}
};
}
添加两者是必要的,因为有两组不同的消息转换器,可在以下bean中使用:
来自WebMvcAutoConfiguration$EnableWebMvcConfiguration
的名为restmappingHandlerAdapter的bean - 有14个消息转换器,包括我的,句柄/pages
和/engine
来自SpringBootRepositoryRestMvcConfiguration
的名为repositoryExporterHandlerAdapter的bean - 有6个消息转换器,包括我的消息转换器,并处理/orders
作为解决方法,我将消息转换器添加两次,如上所示。
但为什么要定制两组不同的消息转换器呢?为什么/ pages和/ engine使用与/ orders不同的设置?是否存在一些错误配置或是它应该如何?
答案 0 :(得分:2)
我相信这是应该的样子。我假设Spring Web MVC的配置与Spring Data Rest的配置是分开的,这样它们就可以很好地协同工作,这样你就可以自定义SDR存储库导出器输出而不会弄乱你的vanilla MVC控制器输出,副反之亦然。
因此,由SDR管理的任何端点都使用SDR集,任何其他自定义控制器都将使用Web MVC集。