resttemplate调用接口核心三步:配置bean、注入使用、选对方法;默认基于httpurlconnection,适合同步中低频调用,需设超时、捕获异常、处理json头,高并发可换httpclient或okhttp。

Spring Boot 里用 RestTemplate 调用接口,核心就三步:配好 Bean、注入使用、选对方法。它默认基于 JDK 的 HttpURLConnection,轻量易上手,适合同步、中低频的第三方调用场景。
一、先配好 RestTemplate Bean
Spring Boot 2.x 及之后版本不再自动配置 RestTemplate,需手动声明为 Spring 管理的 Bean:
- 新建配置类(如
RestTemplateConfig),加上@Configuration - 用
@Bean返回一个RestTemplate实例 - 推荐用
RestTemplateBuilder配超时,更简洁可靠
示例:
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(10))
.build();
}
}
二、在服务里注入并调用
在需要发起请求的 Service 或 Controller 中直接 @Autowired 注入即可:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
getForObject(url, clazz):最常用,适合简单 GET,自动反序列化 -
getForEntity(url, clazz):需要检查状态码或响应头时用(比如判断 401/500) -
postForObject(url, requestObj, clazz):发 JSON 请求体,自动序列化 + 设置Content-Type: application/json -
exchange(...):最灵活,支持任意 HTTP 方法、自定义头、泛型响应
小例子(调天气 API):
@Service
public class WeatherService {
@Autowired
private RestTemplate restTemplate;
public String getWeather(String city) {
String url = "https://api.weather.com/v1/current?city={city}";
Map<string string> params = Map.of("city", city);
return restTemplate.getForObject(url, String.class, params);
}
}</string>
三、关键细节不能漏
线上出问题,往往卡在这几处:
- 超时必须设:不设连接/读取超时,可能线程卡死、线程池耗尽
-
异常要捕获:
RestClientException及其子类(如ResourceAccessException、HttpClientErrorException)需统一处理 -
JSON 请求别忘头:如果手动构造
HttpEntity发 POST,记得headers.setContentType(MediaType.APPLICATION_JSON) -
高并发可换底层:默认 HttpURLConnection 不带连接池;压测发现性能瓶颈,可换成 Apache HttpClient 或 OkHttp(配
HttpComponentsClientHttpRequestFactory)
四、加点实用增强(可选)
让调用更健壮:
- 加日志拦截器:实现
ClientHttpRequestInterceptor,打印 URL、耗时、状态码 - 统一加认证头:拦截器里自动塞
Authorization或X-Api-Key - 配合重试机制:用
spring-retry对临时性失败(如 503)做指数退避重试
RestTemplate 不复杂但容易忽略细节,把 Bean 配稳、超时设对、异常兜住,基本就能在线上安稳跑起来。










