Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用新RestTemplate与restTemplateBuilder创建RestTemplate_Java_Spring_Rest_Spring Mvc - Fatal编程技术网

Java 使用新RestTemplate与restTemplateBuilder创建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 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
可能具有其他配置,例如拦截器(分布式跟踪和度量是常见的)。