【问题标题】:Spring TestRestTemplate POST and PUT not working when adding Netty as a dependency将 Netty 添加为依赖项时,Spring TestRestTemplate POST 和 PUT 不起作用
【发布时间】:2017-03-09 02:02:20
【问题描述】:

添加时

    compile 'io.netty:netty-all:4.1.6.Final'

作为我的 Spring Boot 项目的依赖项,我使用 TestRestTemplate.postForObject(...)TestRestTemplate.put(...) 的所有单元测试开始失败。似乎请求正文未传输,因为我收到以下错误

Failed to read HTTP message:... HttpMessageNotReadableException: Required request body is missing

该服务仍在工作并接受 POST 和 PUT 请求。我使用curl检查了这一点。另一方面,TestRestTemplate.getForObject(...) 仍在工作。使用普通的RestTemplate 进行 POST 和 PUT 也可以。

我尝试配置 TestRestTemplate(正确的解决方案,错误的实现 -> 查看我的答案

@TestConfiguration 静态类 TestConfig { @豆角,扁豆 RestTemplateBuilder restTemplateBuilder() { RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder() restTemplateBuilder.detectRequestFactory(false) restTemplateBuilder.requestFactory(new SimpleClientHttpRequestFactory()) 返回 restTemplateBuilder } }

没有效果。我也尝试使用Netty4ClientHttpRequestFactory,但也没有用。例如,我尝试使用GsonHttpMessageConverter 配置HttpMessageConverter...没有效果。

【问题讨论】:

    标签: java spring spring-boot netty


    【解决方案1】:

    TestRestTemplate 不起作用,因为 Spring Boot 将其配置为在类路径上找到 Netty 时使用 Netty4ClientHttpRequestFactory 并且 Netty4ClientHttpRequestFactory 似乎不起作用。

    https://github.com/spring-projects/spring-boot/issues/7240https://jira.spring.io/browse/SPR-14860

    要制作TestRestTemplate.postForObject(...)TestRestTemplate.put(...),我必须提供RestTemplateBuilder @Bean 并将其配置为使用SimpleClientHttpRequestFactory。问题中的RestTemplateBuilder@Bean 有一些错误。应该是这样的

    @TestConfiguration
    static class TestConfig {
        @Bean
        public RestTemplateBuilder restTemplateBuilder() {
            return new RestTemplateBuilder().detectRequestFactory(false).requestFactory(SimpleClientHttpRequestFactory.class);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2016-12-21
      • 1970-01-01
      相关资源
      最近更新 更多