java - Spring将ProtobufHttpMessageConverter添加到没有xml配置的 Controller

标签 java spring spring-mvc

这应该非常简单,但我不知道如何在保持默认 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/

相关文章:

java - maven型材还是 Spring 型材?

java - Spring MVC Bean 转换

java - HTTP 状态 405 - 不支持请求方法 'PUT'

java - 可以直接向队列发送消息请求吗?

java - 错误: org. apache.hadoop.mapred.InvalidInputException:输入路径不存在

java - Rest API - Spring Controller 和资源

spring - Tomcat 9 Spring MVC 应用程序 JS 文件使用 header text/html 而不是 application/javascript 下载

java - 带有 Netty4 的 Spring RestTemplate 和 AsyncRestTemplate 永远挂起

java - OpenJPA 和存储过程、Weblogic 12c

java - 覆盖 BeanPropertyRowMapper 以支持 JodaTime DateTime