RestTemplate 实现后端 HTTP 调用详解
1. 方法签名
解析
方法名和返回类型说明了这个方法的业务意图和数据结构。
@Override
表示实现接口方法,利于规范开发和自动检查。@Override public List<RobotInfo> listRobots() {
这里
RobotInfo
是假设的业务数据结构,实际项目中按你的类名即可。
2. 拼接请求 URL
解析
组装目标 API 的完整地址,通常包含基础域名(可配置)+ 路径 + 查询参数。
日志打印有助于排查接口调用问题。
String url = baseUrl + "/api/v1/robots?page=1&pageSize=10"; log.debug("请求URL: {}", url);
3. 构造 HTTP 请求头
解析
HTTP 请求头用于声明认证、数据格式等关键信息。
常见如:
Authorization
(认证),Content-Type
(数据类型)。
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + getToken());
headers.setContentType(MediaType.APPLICATION_JSON);
4. 组装请求实体
解析
GET 请求一般没有请求体,只需要带请求头。
通过
HttpEntity
组合请求头与请求体(这里体为 null)。HttpEntity<Void> entity = new HttpEntity<>(headers);
5. 发起 HTTP 请求并获取响应
解析
用
RestTemplate.exchange()
发送 GET 请求,接收响应并自动反序列化为指定类型。ResponseEntity
可拿到完整响应内容(状态码、响应头、响应体)。
ResponseEntity<RobotListResponse> resp = restTemplate.exchange(url,HttpMethod.GET,entity,RobotListResponse.class
);
6. 解析和返回业务数据
解析
判空处理,避免空指针异常。
返回核心业务数据,便于后续处理。
RobotListResponse body = resp.getBody();
return (body != null && body.getRobots() != null)? body.getRobots(): Collections.emptyList();
完整示例代码
@Override
public List<RobotInfo> listRobots() {// 1. 拼接请求 URLString url = baseUrl + "/api/v1/robots?page=1&pageSize=10";log.debug("请求URL: {}", url);// 2. 构造 HTTP 请求头HttpHeaders headers = new HttpHeaders();headers.set("Authorization", "Bearer " + getToken());headers.setContentType(MediaType.APPLICATION_JSON);// 3. 组装请求实体HttpEntity<Void> entity = new HttpEntity<>(headers);// 4. 发起请求并获取响应ResponseEntity<RobotListResponse> resp = restTemplate.exchange(url,HttpMethod.GET,entity,RobotListResponse.class);// 5. 解析和返回RobotListResponse body = resp.getBody();return (body != null && body.getRobots() != null)? body.getRobots(): Collections.emptyList();
}