web-dev-qa-db-fra.com

Mise à niveau Spring Boot RestTemplateBuilder de 1.5.14 à 2.1.5

J'ai ce morceau de code qui fonctionne bien sur un projet qui utilise RestTemplateBuilder 1.5.14

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

Après la mise à jour vers RestTemplateBuilder 2.1.5, J'ai ce morceau de code:

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

mais lors de l'exécution du code, j'ai un InvocationTargetException / NullPointerException qui disparaît lors de la suppression de la ligne .requestFactory(new MyHttpComponentFactoryBuilder().build().getClass()), mais le débogage new MyHttpComponentFactoryBuilder().build().getClass() n'est pas nul

J'ai aussi essayé avec la solution proposée:

... 
.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;
        }

    }

mais j'ai aussi un InvocationTargetException / NullPointerException

14
Sandro Rey

Essayez de supprimer .getClass() call et si . RequestFactory call pointe vers requestFactory(Class<? extends ClientHttpRequestFactory> requestFactory) méthode de la classe RestTemplateBuilder alors plz partage l'extrait de code de votre MyHttpComponentFactoryBuilder classe

0
abhinav kumar

Cela devrait fonctionner (avec lambda utilisé)

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