代码之家  ›  专栏  ›  技术社区  ›  John

Spring将ProtobufHttpMessageConverter添加到没有xml配置的控制器

  •  1
  • John  · 技术社区  · 10 年前

    这应该很简单,但我不知道如何添加 ProtobufHttpMessageConverter 对于弹簧控制器,同时保持默认值 HttpMessageConverters .

    我已经设置了客户端(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);
        }
    }
    

    有人能帮我补充一下吗 协议HTTP消息转换器 同时保留默认转换器,而不进行xml配置?

    1 回复  |  直到 8 年前
        1
  •  4
  •   M. Deinum    10 年前

    用你的方法,你可以让它奏效。然而,由于您扩展了 WebMvcConfigurationSupport 和使用 @EnableWebMvc 不工作。您现在基本上配置了两次web支持 @EnableWebMvc 正在导入 WebMvcConfiguration支持 (实际上 DelegatingWebMvcConfiguration ).

    要使当前设置正常工作,请删除 @启用WebMvc 注释。

    @Configuration
    @ComponentScan
    public class RestServiceConfiguration extends WebMvcConfigurationSupport {
    
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            converters.add(new ProtobufHttpMessageConverter());
            super.addDefaultHttpMessageConverters(converters);
        }
    }
    

    然而,有一种更好的方法,而不是扩展 WebMvcConfiguration支持 你应该延长 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中添加,早期版本使用第一种方法!