下一篇[未完待續]
<code>英文原文:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-resttemplate.html/<code>
<code>GitHub:https://github.com/jijicai/Spring/tree/master/spring-boot/<code>
35、使用 RestTemplate 調用 REST 服務
如果需要從應用程序調用遠程 REST 服務,可以使用 Spring 框架的 RestTemplate 類。由於 RestTemplate 實例通常需要在使用之前進行自定義,因此 Spring Boot 不提供任何單個自動配置的 RestTemplate bean。然而,它確實自動配置了一個 RestTemplateBuilder,它可以在需要時用於創建 RestTemplate 實例。自動配置的 RestTemplateBuilder 確保合理的 HttpMessageConverters 應用於 RestTemplate 實例。
以下代碼展示了一個典型示例:
<code>@Service
public class MyService {
private final RestTemplate restTemplate;
public MyService(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}
public Details someRestCall(String name) {
return this.restTemplate.getForObject("/{name}/details", Details.class, name);
}
}/<code>
提示:RestTemplateBuilder 包括許多可用於快速配置 RestTemplate 的有用方法。例如,要添加基本身份驗證支持,你可以使用 builder.basicAuthentication("user", "password").build()。
35.1、RestTemplate 自定義
有三種主要的 RestTemplate 自定義方法,這基本上取決於你希望如何應用自定義。
要使任何自定義的範圍儘可能縮小,請注入自動配置的 RestTemplateBuilder,然後根據需要調用其方法。每個方法調用都會返回一個新的 RestTemplateBuilder 實例,因此自定義項只會影響該生成器的使用。
要進行應用範圍的附加定製,請使用 RestTemplateCustomizer bean。所有此類 bean 都將自動註冊到自動配置的 RestTemplateBuilder 中,並應用於使用它構建的任何模板。
以下示例顯示一個自定義程序,該自定義程序為除 192.168.0.5 以外的所有主機配置代理的使用:
<code>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));
}
}/<code>
最後,最極端的 (很少使用的) 選項是創建你自己的 RestTemplateBuilder bean。這樣做可以關閉 RestTemplateBuilder 的自動配置,並防止使用任何 RestTemplateCustomizer bean。
下一篇[未完待續]
閱讀更多 IT薺薺菜 的文章