You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java新手求助:Gradle构建的Spring Boot如何用RestTemplate调用外部API

嘿,作为Java和Spring Boot的新手,能写出第一个GET接口已经超棒啦!接下来咱们一步步扩展你的代码,用RestTemplate调用外部API~

第一步:把RestTemplate交给Spring管理

首先得让Spring帮我们创建并管理RestTemplate实例,这样才能在Controller里轻松注入使用。你可以新建一个配置类,或者直接在你的Spring Boot主类(带@SpringBootApplication的那个类)里添加一个Bean定义:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
第二步:在你的Controller里注入RestTemplate并新增接口

修改你的HelloController,注入RestTemplate,然后添加一个专门调用外部API的接口:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class HelloController {

    // 注入RestTemplate(用构造函数注入是Spring推荐的方式哦)
    private final RestTemplate restTemplate;

    @Autowired
    public HelloController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    // 你的原有Hello接口
    @GetMapping("/hello")
    public String printWelcome(ModelMap model) {
        model.addAttribute("message", "Hello");
        return "hello";
    }

    // 新增的调用外部API的接口
    @GetMapping("/call-external-api")
    public String callExternalApi() {
        // 这里替换成你要调用的外部API的实际URL,我用JSONPlaceholder的测试接口举例
        String externalApiUrl = "https://jsonplaceholder.typicode.com/todos/1";
        
        // 用RestTemplate的getForObject方法发起GET请求,直接把响应转成字符串
        String apiResponse = restTemplate.getForObject(externalApiUrl, String.class);
        
        // 你可以在这里处理响应数据,比如返回给前端,或者做业务逻辑
        return "External API Response: " + apiResponse;
    }
}
第三步:(可选)把响应映射到自定义实体类

如果外部API返回的是JSON格式,你可以创建一个对应的实体类来接收响应,这样处理数据会更方便。比如上面的测试接口返回的是一个todo对象,我们可以定义一个Todo类:

public class Todo {
    private int userId;
    private int id;
    private String title;
    private boolean completed;

    // 记得添加所有属性的getter和setter,或者用Lombok的@Data注解来简化代码
    public int getUserId() { return userId; }
    public void setUserId(int userId) { this.userId = userId; }
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    public boolean isCompleted() { return completed; }
    public void setCompleted(boolean completed) { this.completed = completed; }
}

然后修改callExternalApi方法,直接把响应映射到Todo类:

@GetMapping("/call-external-api")
public String callExternalApi() {
    String externalApiUrl = "https://jsonplaceholder.typicode.com/todos/1";
    
    // 把API响应直接转成Todo实体对象
    Todo todo = restTemplate.getForObject(externalApiUrl, Todo.class);
    
    // 现在可以轻松获取实体里的属性啦
    return "External API Todo Title: " + todo.getTitle();
}
一些实用小提示
  • 如果外部API需要请求头、URL参数或者其他HTTP方法(比如POST、PUT),RestTemplate都有对应的方法,比如postForObject、exchange(这个更灵活,支持自定义请求头和复杂场景)。
  • 生产环境中,一定要给RestTemplate设置超时时间,避免调用外部API时卡住你的应用。可以这样配置:
@Bean
public RestTemplate restTemplate() {
    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    factory.setConnectTimeout(5000); // 连接超时5秒
    factory.setReadTimeout(5000);    // 读取超时5秒
    return new RestTemplate(factory);
}
  • 另外,现在Spring Boot也推荐使用WebClient(反应式编程风格),不过如果你刚入门,先把RestTemplate搞明白就好,后续再学习WebClient也完全没问题。

内容的提问来源于stack exchange,提问作者Nico Levi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:55:25