java - SpringBoot 将 RestTemplateBuilder 从 1.5.14 升级到 2.1.5

标签 java spring spring-boot resttemplate spring-resttemplate

我的这段代码在使用 RestTemplateBuilder 1.5.14 的项目上运行良好

this.restTemplate = restTemplateBuilder
                .setConnectTimeout(connectTimeout)
                .setReadTimeout(readTimeout)
                .requestFactory(new MyHttpComponentFactoryBuilder()
                        .build())
                .build();

更新到 RestTemplateBuilder 2.1.5 后我有这段代码:
this.restTemplate = restTemplateBuilder
                .setConnectTimeout(Duration.ofMillis(connectTimeout))
                .setReadTimeout(Duration.ofMillis(readTimeout))
                .requestFactory(new MyHttpComponentFactoryBuilder().build().getClass())
                .build();

但是在运行代码时我有一个 InvocationTargetException / NullPointerException删除行 .requestFactory(new MyHttpComponentFactoryBuilder().build().getClass()) 时消失, 但调试 new MyHttpComponentFactoryBuilder().build().getClass()不为空

我也尝试过提出的解决方案:
... 
.requestFactory(new MyRequestFactorySupplier())
...

class MyRequestFactorySupplier implements Supplier<ClientHttpRequestFactory> {

        @Override
        public ClientHttpRequestFactory get() {

            // Using Apache HTTP client.
            HttpClientBuilder clientBuilder = HttpClientBuilder.create();
            HttpClient httpClient = clientBuilder.build();
            HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
            requestFactory.setBufferRequestBody(false); // When sending large amounts of data via POST or PUT, it is recommended to change this property to false, so as not to run out of memory.
            return requestFactory;
        }

    }

但我也有 InvocationTargetException / NullPointerException

最佳答案

下面的代码显示了您需要如何为简单案例创建模板。

RestTemplate tmpl = new RestTemplateBuilder().setConnectTimeout(Duration.ofMillis(200))
                                             .setReadTimeout(Duration.ofMillis(100))
                                             .requestFactory(org.springframework.http.client.SimpleClientHttpRequestFactory.class)
                                             .build();

最好能提供MyHttpComponentFactoryBuilder的源代码类(class)。但我的建议是创建一个类 MyHttpComponentFactory扩展 SimpleClientHttpRequestFactory class 从 MyHttpComponentFactoryBuilder 迁移您的代码到它。

关于java - SpringBoot 将 RestTemplateBuilder 从 1.5.14 升级到 2.1.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61976056/

相关文章:

java - log4j 干扰 - 级别一直设置为 "OFF"

java - 如何在gwt建议框中从mysql进行自动建议

java - 如何在RxJava中实现链锁

Spring Injection 在 Jersey 过滤器中不起作用 - @InjectParam 在 jersey2 中等效

spring - 在Docker中运行嵌入式mongo时org.springframework.beans.factory.UnsatisfiedDependencyException

java - 将 Stateless (Webservice)Bean 注入(inject)另一个 Bean

java - Spring Security for Active Directory 搜索为 'userPrincipalName'——有办法改变这个吗?

java - 如何使 Controller 端点在 java spring 中获取两个不同的对象?

java - 配置属性注释问题

java - 删除 Spring Boot 上对 "/"的直接访问