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. 拼接请求 URL
String 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();
}