我在我的项目上使用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();
}
}
答案 0 :(得分:4)
requestFactory
方法采用类或Supplier<ClientHttpRequestFactory>
,因此您需要执行以下任一操作:
.requestFactory(HttpComponentsClientHttpRequestFactory.class)
或
.requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client))
大概是后者,因为您想传递client
。
答案 1 :(得分:1)
以下方法在Spring Boot 1.x之前都可以正常工作
.requestFactory(new HttpComponentsClientHttpRequestFactory(client))
但是在更高版本的Spring Boot(如2.x)中,您需要将其更改为-
.requestFactory(HttpComponentsClientHttpRequestFactory.class)
或
.requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client))