这应该非常简单,但我无法确定如何为Spring控制器添加ProtobufHttpMessageConverter
,同时保持默认HttpMessageConverters
。
我设置了客户端(RestTemplate)但是我发送的每个请求都有错误415 :内容不受支持。
到目前为止,我发现的每个示例都指的是Spring Boot或XML配置,但这些都不适用于我。
在
answer关于类似问题,
扩展WebMvcConfigurerAdapter
显然会删除默认处理程序。
声明扩展WebMvcConfigurationSupport
以保留默认处理程序,但由于方法调用super.addDefaultHttpMessageConverters();
需要转换器列表,因此实现对Spring 4x不起作用。
我在主题上尝试了variantions但似乎都没有效果:
@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);
}
}
在没有xml配置的情况下,有人可以帮我添加ProtobufHttpMessageConverter
同时保留默认转换器吗?
答案 0 :(得分:4)
通过您的方法,您可以使其发挥作用。但是,由于您延长了WebMvcConfigurationSupport
并使用了@EnableWebMvc
,因此无法使用。您基本上是在配置网络支持两次,因为@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());
}
}
注意: Spring 4.1.3中添加了extendMessageConverters
方法,早期版本使用第一种方法!