RestTemplate 实现后端 HTTP 调用详解

发布于:2025-07-17 ⋅ 阅读:(27) ⋅ 点赞:(0)

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();
}


网站公告

今日签到

点亮在社区的每一天
去签到