Java 使用新RestTemplate与restTemplateBuilder创建RestTemplate
以这种方式创建RestTemplate有什么区别Java 使用新RestTemplate与restTemplateBuilder创建RestTemplate,java,spring,rest,spring-mvc,Java,Spring,Rest,Spring Mvc,以这种方式创建RestTemplate有什么区别 RestTemplate restTemplate = restTemplateBuilder .setConnectTimeout(Duration.ofMillis(connectTimeout)) .setReadTimeout(Duration.ofMillis(readTimeout)) .build(); CloseableHttpCli
RestTemplate restTemplate = restTemplateBuilder
.setConnectTimeout(Duration.ofMillis(connectTimeout))
.setReadTimeout(Duration.ofMillis(readTimeout))
.build();
CloseableHttpClient httpClient = HttpClientBuilder.create().disableCookieManagement().build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
factory.setReadTimeout(readTimeout);
factory.setConnectTimeout(connectTimeout);
RestTemplate restTemplate = new RestTemplate(factory);
这边
RestTemplate restTemplate = restTemplateBuilder
.setConnectTimeout(Duration.ofMillis(connectTimeout))
.setReadTimeout(Duration.ofMillis(readTimeout))
.build();
CloseableHttpClient httpClient = HttpClientBuilder.create().disableCookieManagement().build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
factory.setReadTimeout(readTimeout);
factory.setConnectTimeout(connectTimeout);
RestTemplate restTemplate = new RestTemplate(factory);
我想你的问题是关于Scope restTemplateBuilder的。正如Spring文档中提到的: 要使任何定制的范围尽可能缩小,请注入 自动配置的RestTemplateBuilder,然后调用其方法 必修的。每个方法调用都返回一个新的RestTemplateBuilder实例, 因此,自定义仅影响生成器的这种使用 例如:
private RestTemplate restTemplate;
@Autowired
public HelloController(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
要在应用程序范围内进行添加式自定义,请使用
restemplatecustomizerbean。所有这些bean都是自动生成的
已在自动配置的RestTemplateBuilder中注册,并且
应用于使用它构建的任何模板
范例
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进行窄幅显示。对于应用程序范围,请使用RestTemplateCustomizer
参考链接:
其他详细信息示例:首先,
restemplatebuilder
可能具有其他配置,例如拦截器(分布式跟踪和度量是常见的)。