RestTemplate

如果需要从应用程序调用远程REST服务,可以使用Spring Framework的RestTemplate类。由于 RestTemplate实例在使用之前通常需要自定义,因此Spring Boot不提供任何单个自动配置的RestTemplatebean。但是,它会自动配置a RestTemplateBuilder,可用于RestTemplate 在需要时创建实例。自动配置RestTemplateBuilder可确保将敏感 HttpMessageConverters应用于RestTemplate实例。

以下代码显示了一个典型示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
@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包括许多可用于快速配置a的有用方法RestTemplate。例如,要添加BASIC auth支持,您可以使用builder.basicAuthentication("user", "password").build()

RestTemplate自定义

RestTemplate自定义有三种主要方法,具体取决于您希望自定义应用的广泛程度。

要使任何自定义的范围尽可能窄,请注入自动配置 RestTemplateBuilder,然后根据需要调用其方法。每个方法调用都返回一个新RestTemplateBuilder实例,因此自定义只会影响构建器的这种使用。

要进行应用程序范围的附加定制,请使用RestTemplateCustomizerbean。所有这些bean都自动注册自动配置RestTemplateBuilder ,并应用于使用它构建的任何模板。

以下示例显示了一个自定义程序,它为所有主机配置代理的使用,但192.168.0.5以下情况除外:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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));
}
}

最后,最极端(很少使用)的选项是创建自己的 RestTemplateBuilderbean。这样做会关闭自动配置 的RestTemplateBuilder并阻止使用任何RestTemplateCustomizerbean。