本文翻译自 https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/#boot-features-restclient
33. 调用REST 服务
你的应用如果需要调用远程的REST服务,你可以使用Spring框架的RestTemplate
类。由于RestTemplate
实例经常需要在使用前定制,所以Spring Boot不提供任何单一自动配置的RestTemplate
bean。她所做的是自动配置一个RestTemplateBuilder
用于在需要RestTemplate
实例时创建一个RestTemplate
实例。自动配置的RestTemplateBuilder
将确保合理的HttpMessageConverters
应用于RestTemplate
实例。
这是一个经典例子:
@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);
}
}
| RestTemplateBuilder
包含许多有用的方法,可以用来快速配置RestTemplate
。例如,你可以使用 buikder.basicAuthorization("user","password").build()
来增加BASIC认证支持。
33.1 RestTemplate 定制
对RestTemplate定制有三种主要方法,这取决于您对定制的应用范围。
为了尽可能缩小任何自定义的范围,注入自动配置的RestTemplateBuilder
然后按需调用其方法。每个方法调用返回一个新的RestTemplateBuilder
实例,因此自定义只会影响构建器的使用。
为了是应用程序范围更广,可以使用一个附加定制的RestTemplateCustomizer
bean。所有这些bean豆浆自动注册到自动配置的RestTemplateBuilder
中,并将应用于使用它构建的任何模板。
下面是一个定制器的例子,它为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));
}
}
最后,最极端(也是很少使用的)选项是创建自己的RestTemplateBuilder
bean。这将关闭RestTemplateBuilder
的自动配置,并阻止使用任何的RestTemplateCustomizer
beans。