最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。
环境:SpringBoot3.2.5
本文并非旨在阐述RestTemplate的基本使用方法,而是聚焦于揭示其更多实用且高级的应用技巧与策略。
同时你还应该知道,Spring官方不建议再使用RestTemplate,而是基于非阻塞响应式的WebClient,原文如下:
如果你想了解更多的关于WebClient如何使用或他们的对比,你可以查看下面文章
神器来袭!告别RestTemplate,WebClient霸气登场
1. 简介
Spring RestTemplate 是 Spring 框架 WebMVC 模块的一部分,在 Spring WebFlux 的 WebClient 成为新标准之前,它一直是发起 HTTP 请求的主要入口点。
RestTemplate提供了一个模板风格的 API(例如 JdbcTemplate 或 JmsTemplate),用于发起 HTTP 请求,这使得以结构化的方式处理 RESTful API 变得容易。RestTemplate 使用底层的 HTTP 客户端库,如 JDK HttpURLConnection、Apache HttpComponents 等。
接下来,我将详细介绍RestTemplate中的各种高级应用。
2. 实战案例
2.1 RestTemplate创建
RestTemplate创建方式有2种:
直接构造RestTemplate对象
直接通过构造函数创建RestTemplate时,虽然所有配置项都需要手动完成,这可能会稍显繁琐,但如果你的需求较为简单,仅仅需要进行基础的HTTP调用,那么这种方式依然是一个简洁有效的选择。如下示例:
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate() ;
// restTemplate.xxx 进行相关的配置。
return restTemplate ;
}
如果你的使用本身就很简单,上面的这种方式再适合不过了。
通过RestTemplateBuilder
通过该Builder对象,使得我们构造ResetTemplate变得非常的简单,各种配置也非常容器,并且该对象是Spring Boot自动配置的,我们可以直接注入。如下示例:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(5))
.build() ;
}
这里我们非常方便的设置了超时时间,如果你要使用第一种方式,那么你还得自己构造ClientHttpRequestFactory对象进行超时配置。
2.2 切换请求实现
在默认情况下,RestTemplate底层是通过JDK的 java.net.HttpURLConnection 来执行请求,我们可以通过如下的方式来自定义或者使用其它的实现,如:Apache HttpComponents,okhttp等来实现。
自定义默认的ClientHttpRequestFactory实现
我们可以在默认的实现上设置超时时间,异步执行线程池等,如下示例:
@Bean
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory clientHttpRequestFactory =
new SimpleClientHttpRequestFactory() ;
clientHttpRequestFactory.setReadTimeout(5000) ;
clientHttpRequestFactory.setConnectTimeout(5000) ;
// 注意该方法已过时,不建议使用了,如果你要异步请使用WebClient
clientHttpRequestFactory.setTaskExecutor(...) ;
return new RestTemplate(clientHttpRequestFactory)
}
注:这底层还是JDK Client实现。