Spring Boot中文參考指南 35、使用 RestTemplate 調用 REST 服務

下一篇[未完待續]

Spring Boot中文參考指南 35、使用 RestTemplate 調用 REST 服務

<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 實例。

以下代碼展示了一個典型示例:

Spring Boot中文參考指南 35、使用 RestTemplate 調用 REST 服務

<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 以外的所有主機配置代理的使用:

Spring Boot中文參考指南 35、使用 RestTemplate 調用 REST 服務

<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。

下一篇[未完待續]


分享到:


相關文章: