如果您需要从应用程序中调用远程REST服务,则可以使用Spring Framework的RestTemplate
类。由于RestTemplate
实例在使用前通常需要自定义,因此Spring Boot不提供任何单个自动配置的RestTemplate
bean。但是,它会自动配置a 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身份验证支持,可以使用builder.basicAuthentication("user", "password").build() 。 |
|
---|---|
15.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。为防止关闭a的自动配置RestTemplateBuilder
并防止使用任何RestTemplateCustomizer
bean,请确保使用来配置自定义实例RestTemplateBuilderConfigurer
。下面的示例展示了RestTemplateBuilder
Spring Boot将自动配置的a,除了还指定了自定义连接和读取超时:
@Bean
public RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer configurer) {
return configurer.configure(new RestTemplateBuilder()).setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(2));
}
最极端(很少使用)的选项是在RestTemplateBuilder
不使用配置程序的情况下创建自己的bean。这样做会关闭a的自动配置,RestTemplateBuilder
并防止使用任何RestTemplateCustomizer
bean。