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
相关产品推荐
相关产品推荐

