- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在所有 RestTemplate 客户端请求中添加一个自定义 header 。所以我实现了 ClientHttpRequestInterceptor
。然后我在我的 RestTemplateBuilder
配置中添加拦截器,如下所示。问题是,当 RestTemplate 进行 HTTP 调用时,它抛出以下异常:
java.lang.ClassCastException: org.springframework.http.client.InterceptingClientHttpRequestFactory cannot be cast to org.springframework.http.client.HttpComponentsClientHttpRequestFactory
RestTemplate Bean 创建:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager();
poolingConnectionManager.setMaxTotal(restTemplateProps.getMaxConnectionsPerPool());
poolingConnectionManager.setDefaultMaxPerRoute(restTemplateProps.getMaxDefaultConnectionPerRoute());
CloseableHttpClient client = HttpClientBuilder.create().setConnectionManager(poolingConnectionManager).build();
ClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(client);
restTemplateBuilder = restTemplateBuilder.additionalInterceptors(new MyClientHttpRequestInterceptor());
return restTemplateBuilder.requestFactory(clientHttpRequestFactory).build();
}
此外,我稍后会在下面的代码中更新超时:
protected void setRestTemplateTimeouts() {
HttpComponentsClientHttpRequestFactory rf =
(HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory();
rf.setConnectTimeout(restTemplateProps.getConnectionTimeout());
rf.setReadTimeout(restTemplateProps.getSocketTimeout());
}
谁能帮我解决这个问题?
最佳答案
问题是,我试图在设置 ClientHttpRequestInterceptor
之后设置连接和读取超时。
在我的 setRestTemplateTimeouts()
方法中,当我尝试获取并将 requestFactory
类型转换为 HttpComponentsClientHttpRequestFactory
时,我得到了 ClassCastException
异常,因为 restTemplate.getRequestFactory()
返回 InterceptingClientHttpRequestFactory
而不是 HttpComponentsClientHttpRequestFactory
。这是因为我在我的 restTemplate 对象中添加了一个拦截器。
解决办法是设置超时前设置拦截器,因为设置拦截器后不能设置超时。引用以下代码:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager();
poolingConnectionManager.setMaxTotal(restTemplateProps.getMaxConnectionsPerPool());
poolingConnectionManager.setDefaultMaxPerRoute(restTemplateProps.getMaxDefaultConnectionPerRoute());
CloseableHttpClient client = HttpClientBuilder.create().setConnectionManager(poolingConnectionManager).build();
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(client);
clientHttpRequestFactory.setConnectTimeout(restTemplateProps.getConnectionTimeout());
clientHttpRequestFactory.setReadTimeout(restTemplateProps.getSocketTimeout());
restTemplateBuilder = restTemplateBuilder.additionalInterceptors(new MyClientHttpRequestInterceptor());
return restTemplateBuilder.requestFactory(clientHttpRequestFactory).build();
}
关于java - 使用 HttpComponentsClientHttpRequestFactory 在 RestTemplateBuilder 中添加自定义 ClientHttpRequestInterceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49269636/
我将 spring-boot 与 spring-web 和 jackson 一起使用。 问题:当 Spring 自动初始化 RestTemplate 时,构造函数会收到一些重复的 MessageCon
我在测试 Spring Controller 时遇到了问题。我在我的测试类中使用注释@WebMvcTest。当我运行测试时,我得到这个错误:没有可用的“org.springframework.boot
我有一个 Java-Spring 库(不是应用程序),它通过电话号码发送通知。我正在使用 Rest 模板发送 POST 请求。但是我不想创建 RestTemplate 的新对象,而是想使用 RestT
我正在构建一个用于上传大文件(数 GB)的反向代理,因此希望使用不缓冲整个文件的流模型。大缓冲区会引入延迟,更重要的是,它们可能会导致内存不足错误。 我的客户类包含 @Autowired privat
在 Spring 启动应用程序中使用带有 @ContextConfiguration 的 RestTemplateBuilder 时遇到问题(我尝试添加 @SpringBootTest、@RunWit
在 Spring Boot 中,我正在尝试创建一个 RestTemplate ,它将使用基本身份验证 @Bean public RestTemplate restTemplate(RestTempla
这个问题已经有答案了: Custom RestTemplate using requestFactory of RestTemplateBuilder in SpringBoot 2.1.x is n
我需要在所有 RestTemplate 客户端请求中添加一个自定义 header 。所以我实现了 ClientHttpRequestInterceptor。然后我在我的 RestTemplateBui
我想测试一个 Tasklet 实现,它使用 @Autowired RestTemplateBuilder 构建 RestTemplate。 RestTemplate 执行请求。我想模拟这个请求的响应。
我有一个 REST 资源,它获取一个 RestTemplateBuilder 注入(inject)来构建一个 RestTemplate: public MyClass(final RestTempla
尝试使用 RestTemplateBuilder 在 Spring Boot 2.1.4 中 @Autowired RestTemplate。当我运行 junit 测试时,尝试自动连接 RestTem
我在我的项目中使用 springBootVersion = '2.0.1.RELEASE'。我正在尝试为我编写的 RestClientCertTestConfiguration 类编写相互身份验证代码
我的这段代码在使用 RestTemplateBuilder 1.5.14 的项目上运行良好 this.restTemplate = restTemplateBuilder
我是一名优秀的程序员,十分优秀!