If you need to call remote REST services from your application, you can use Spring
Framework’s RestTemplate
class. Since RestTemplate
instances often need to be
customized before being used, Spring Boot does not provide any single auto-configured
RestTemplate
bean. It does, however, auto-configure a RestTemplateBuilder
which can be
used to create RestTemplate
instances when needed. The auto-configured
RestTemplateBuilder
will ensure that sensible HttpMessageConverters
are applied
to RestTemplate
instances.
Here’s a typical example:
@Service public class MyBean { private final RestTemplate restTemplate; public MyBean(RestTemplateBuilder restTemplateBuilder) { this.restTemplate = restTemplateBuilder.build(); } public Details someRestCall(String name) { return this.restTemplate.getForObject("/{name}/details", Details.class, name); } }
Tip | |
---|---|
|
When a RestTemplateBuilder
builds a RestTemplate
it can be further customized using
a RestTemplateCustomizer
. Any RestTemplateCustomizer
beans will be automatically
added to the auto-configured RestTemplateBuilder
. Furthermore, a new
RestTemplateBuilder
with additional customizers can be created by calling
additionalCustomizers(RestTemplateCustomizer…)
.
Here’s an example of a customizer that configures the use of a proxy for all hosts except
192.168.0.5
:
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)); } }