如果您需要从应用程序中调用远程REST服务,则可以使用Spring Framework的RestTemplate类。由于RestTemplate实例在使用前通常需要自定义,因此Spring Boot不提供任何单个自动配置的RestTemplatebean。但是,它会自动配置a RestTemplateBuilder,可以RestTemplate在需要时创建实例。自动配置RestTemplateBuilder可确保明智HttpMessageConverters地应用于RestTemplate实例。
以下代码显示了一个典型示例:
@Servicepublic 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身份验证支持,可以使用builder.basicAuthentication("user", "password").build()。 | 
|
|---|---|
15.1 RestTemplate自定义
有三种主要的RestTemplate自定义方法,具体取决于您希望自定义应用的范围。
为了使所有自定义的范围尽可能缩小,请注入自动配置的内容RestTemplateBuilder,然后根据需要调用其方法。每个方法调用都返回一个新RestTemplateBuilder实例,因此自定义仅影响构建器的使用。
要进行应用程序范围的附加自定义,请使用RestTemplateCustomizerBean。所有此类bean都会自动向自动配置中注册,RestTemplateBuilder并应用于自动生成的任何模板。
以下示例显示了一个定制器,该定制器为除以下之外的所有主机配置代理的使用192.168.0.5:
static class ProxyCustomizer implements RestTemplateCustomizer {@Overridepublic void customize(RestTemplate restTemplate) {HttpHost proxy = new HttpHost("proxy.example.com");HttpClient httpClient = HttpClientBuilder.create().setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {@Overridepublic 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));}}
最后,您还可以创建自己的RestTemplateBuilderbean。为防止关闭a的自动配置RestTemplateBuilder并防止使用任何RestTemplateCustomizerbean,请确保使用来配置自定义实例RestTemplateBuilderConfigurer。下面的示例展示了RestTemplateBuilderSpring Boot将自动配置的a,除了还指定了自定义连接和读取超时:
@Beanpublic RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer configurer) {return configurer.configure(new RestTemplateBuilder()).setConnectTimeout(Duration.ofSeconds(5)).setReadTimeout(Duration.ofSeconds(2));}
最极端(很少使用)的选项是在RestTemplateBuilder不使用配置程序的情况下创建自己的bean。这样做会关闭a的自动配置,RestTemplateBuilder并防止使用任何RestTemplateCustomizerbean。
