将自定义HttpMessageConverter添加到spring-boot / spring-data-rest应用程序

时间:2015-10-22 10:01:48

标签: spring-boot spring-data-rest

我想将一个自定义的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不同的设置?是否存在一些错误配置或是它应该如何?

1 个答案:

答案 0 :(得分:2)

我相信这是应该的样子。我假设Spring Web MVC的配置与Spring Data Rest的配置是分开的,这样它们就可以很好地协同工作,这样你就可以自定义SDR存储库导出器输出而不会弄乱你的vanilla MVC控制器输出,副反之亦然。

因此,由SDR管理的任何端点都使用SDR集,任何其他自定义控制器都将使用Web MVC集。