将自定义 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 集。
我想将自定义 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 集。