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

33. 使用RestTemplate調用REST服務

若是須要從應用程序調用遠程REST服務,你可使用Spring框架的RestTemplate類,因爲RestTemplate實例一般須要在使用以前進行定製,所以Spring Boot不提供任何自動配置的RestTemplate bean。可是,它能夠自動配置一個RestTemplateBuilder,當須要時,它能夠用來建立RestTemplate實例。自動配置的RestTemplateBuilder確保將合理的HttpMessageConverters應用於RestTemplate實例。html

下面的代碼展現了一個典型的樣例:java

@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定製有三種主要方法,取決於你但願定製應用到的範圍有多廣。web

要使任何定製的範圍儘量狹窄,請注入自動配置的RestTemplateBuilder,而後根據須要調用其方法,每一個方法調用都返回一個新的RestTemplateBuilder實例,所以自定義隻影響構建器的這種使用。spring

要進行應用程序範圍內的附加定製,請使用RestTemplateCustomizer bean,全部這些bean都會自動註冊到自動配置的RestTemplateBuilder中,並應用於使用它構建的任何模板。segmentfault

下面的示例顯示了一個定製器,它配置除192.168.0.5以外的全部主機的代理的使用:api

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服務

相關文章
相關標籤/搜索