这应该非常简单,但我不知道如何在保持默认 HttpMessageConverters
的同时为 Spring Controller 添加 ProtobufHttpMessageConverter
。
我已经设置了客户端 (RestTemplate),但是对于我发送的每个请求,都有错误 415:内容不受支持。
到目前为止,我发现的每个示例都指的是 Spring Boot 或 XML 配置,但是这些都不适合我。
在
answer关于类似的问题,
扩展 WebMvcConfigurerAdapter
显然会删除默认处理程序。
声明扩展 WebMvcConfigurationSupport
以保留默认处理程序,但给定的实现不适用于 Spring 4x,因为方法调用 super.addDefaultHttpMessageConverters();
需要列表转换器。
我试过主题的变体,但似乎都不起作用:
@EnableWebMvc
@Configuration
@ComponentScan
public class RestServiceConfiguration extends WebMvcConfigurationSupport {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new ProtobufHttpMessageConverter());
// getMessageConverters().add(new ProtobufHttpMessageConverter());
// super.configureMessageConverters(getMessageConverters());
super.addDefaultHttpMessageConverters(converters);
}
}
有人可以帮我添加 ProtobufHttpMessageConverter
同时保留默认转换器,无需 xml 配置吗?
最佳答案
通过您的方法,您可以让它发挥作用。但是,由于您扩展了 WebMvcConfigurationSupport
并使用了 @EnableWebMvc
,因此无法正常工作。您现在基本上配置了两次 Web 支持,如 @EnableWebMvc
正在导入 WebMvcConfigurationSupport
(实际上是 DelegatingWebMvcConfiguration
)。
要使您当前的设置正常工作,请移除 @EnableWebMvc
注释。
@Configuration
@ComponentScan
public class RestServiceConfiguration extends WebMvcConfigurationSupport {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new ProtobufHttpMessageConverter());
super.addDefaultHttpMessageConverters(converters);
}
}
但是有更好的方法,而不是扩展 WebMvcConfigurationSupport
你应该扩展 WebMvcConfigurerAdapter
并实现 extendMessageConverters
方法而不是 configureMessageConverters
。
@EnableWebMvc
@Configuration
@ComponentScan
public class RestServiceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new ProtobufHttpMessageConverter());
}
}
注意extendMessageConverters
方法已在Spring 4.1.3中加入,早期版本使用第一种方法!
关于java - Spring将ProtobufHttpMessageConverter添加到没有xml配置的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952553/