RestTemplateBuilder类型的requestFactory(Class <?扩展ClientHttpRequestFactory>)不适用

Jay*_*Jay 4 java rest spring-boot

我在我的项目上使用springBootVersion ='2.0.1.RELEASE'。我正在尝试为我编写的RestClientCertTestConfiguration类编写相互身份验证代码,如下所示。我在requestFactory上遇到错误。RestTemplateBuilder类型的方法requestFactory(Class)不适用于参数(HttpComponentsClientHttpRequestFactory)关于如何解决此问题的任何建议?谢谢

    @Configuration
public class RestClientCertTestConfiguration {

    private String allPassword = "mypassword";

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) throws Exception {

        SSLContext sslContext = SSLContextBuilder
                .create()
                .loadKeyMaterial(ResourceUtils.getFile("classpath:myCerts.jks"), allPassword.toCharArray(), allPassword.toCharArray())
                .loadTrustMaterial(ResourceUtils.getFile("classpath:myCerts.jks"), allPassword.toCharArray())
                .build();

        HttpClient client = HttpClients.custom()
                .setSSLContext(sslContext)
                .build();

        return builder 
                 //error on this line
                .requestFactory(new HttpComponentsClientHttpRequestFactory(client))
                .build();
    }

}
Run Code Online (Sandbox Code Playgroud)

Dav*_*rad 6

requestFactory方法采用类或a,Supplier<ClientHttpRequestFactory>因此您需要执行以下任一操作:

.requestFactory(HttpComponentsClientHttpRequestFactory.class)
Run Code Online (Sandbox Code Playgroud)

要么

.requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client))
Run Code Online (Sandbox Code Playgroud)

大概是后者,因为您想传递client


Arv*_*mar 6

下面的方法在spring boot 1.x之前可以正常工作

.requestFactory(new HttpComponentsClientHttpRequestFactory(client))
Run Code Online (Sandbox Code Playgroud)

但在更高版本的Spring Boot(如2.x)中,您需要将其更改为-

.requestFactory(HttpComponentsClientHttpRequestFactory.class)
Run Code Online (Sandbox Code Playgroud)

要么

.requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client))
Run Code Online (Sandbox Code Playgroud)