web-dev-qa-db-ja.com

Spring BootがRestTemplateBuilderを1.5.14から2.1.5にアップグレード

_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();
_

コードを実行すると、.requestFactory(new MyHttpComponentFactoryBuilder().build().getClass())の行を削除すると消える_InvocationTargetException / NullPointerException_がありますが、デバッグnew MyHttpComponentFactoryBuilder().build().getClass()はnullではありません

私も提案された解決策を試しました:

_... 
.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_も持っています

14
Sandro Rey

.getClass()呼び出しを削除してみてください。requestFactory callがクラスrequestFactory(Class<? extends ClientHttpRequestFactory> requestFactory)メソッドRestTemplateBuilderを指している場合、MyHttpComponentFactoryBuilderクラス

0
abhinav kumar

これは動作するはずです(ラムダを使用した場合)

.requestFactory(() -> new MyHttpComponentFactoryBuilder().build())
0