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

Adding custom HttpMessageConverter to spring-boot/spring-data-rest application

我想将自定义 HttpMessageConverter 添加到具有 spring 数据剩余的 spring-boot 应用程序,但事实证明我必须在几个地方注入我的消息转换器。作为这种情况的参考项目,取https://github.com/olivergierke/spring-restbucks.

我可以通过将其放入基本配置来添加我的消息转换器 class、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 不同的设置?是否存在某些配置错误,或者它应该如何配置?

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

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