Anton Kolosok
Anton Kolosok

Reputation: 522

Creating RestTemplate with new RestTemplate vs restTemplateBuilder

What is the difference in creating RestTemplate this way

RestTemplate restTemplate = restTemplateBuilder
                .setConnectTimeout(Duration.ofMillis(connectTimeout))
                .setReadTimeout(Duration.ofMillis(readTimeout))
                .build();

and this way

CloseableHttpClient httpClient = HttpClientBuilder.create().disableCookieManagement().build();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);

        factory.setReadTimeout(readTimeout);
        factory.setConnectTimeout(connectTimeout);
        RestTemplate restTemplate = new RestTemplate(factory);

????

Upvotes: 3

Views: 6533

Answers (1)

Phuc Vuu
Phuc Vuu

Reputation: 62

I think your question about Scope restTemplateBuilder.As mention in Spring Document:

Scope of restTemplateBuilder

To make the scope of any customizations as narrow as possible, inject the auto-configured RestTemplateBuilder and then call its methods as required. Each method call returns a new RestTemplateBuilder instance, so the customizations only affect this use of the builder.

Example:

private RestTemplate restTemplate;

@Autowired
public HelloController(RestTemplateBuilder builder) {
    this.restTemplate = builder.build();
}

To make an application-wide, additive customization, use a RestTemplateCustomizer bean. All such beans are automatically registered with the auto-configured RestTemplateBuilder and are applied to any templates that are built with it.

Example

static class ProxyCustomizer implements RestTemplateCustomizer {

    @Override
    public void customize(RestTemplate restTemplate) {
        HttpHost proxy = new HttpHost("proxy.example.com");
        HttpClient httpClient = HttpClientBuilder.create().setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {

            @Override
            public HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context)
                    throws HttpException {
                if (target.getHostName().equals("192.168.0.5")) {
                    return null;
                }
                return super.determineProxy(target, request, context);
            }

        }).build();
        restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
    }

}

Note: For narrow using RestTemplateBuilder. For application-wide using RestTemplateCustomizer

Reference link: Reference link

Additional detail example: Additional example

Upvotes: 2

Related Questions