Spring Boot 參考指南(使用RestTemplate呼叫REST服務)

博弈發表於2019-01-19

33. 使用RestTemplate呼叫REST服務

如果需要從應用程式呼叫遠端REST服務,你可以使用Spring框架的RestTemplate類,由於RestTemplate例項通常需要在使用之前進行定製,因此Spring Boot不提供任何自動配置的RestTemplate bean。但是,它可以自動配置一個RestTemplateBuilder,當需要時,它可以用來建立RestTemplate例項。自動配置的RestTemplateBuilder確保將合理的HttpMessageConverters應用於RestTemplate例項。

下面的程式碼展示了一個典型的樣例:

@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);
    }

}

RestTemplateBuilder包含許多有用的方法,可用於快速配置RestTemplate,例如,要新增BASIC auth支援,可以使用builder.basicAuthorization("user", "password").build()

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


上一篇:訊息傳遞

下一篇:使用WebClient呼叫REST服務

相關文章