springboot3访问第三方接口

发布于:2024-12-18 ⋅ 阅读:(7) ⋅ 点赞:(0)

添加依赖(如果尚未添加)

pom.xml文件中,确保已经包含spring-boot-starter-web依赖,因为RestTemplate通常在这个依赖范围内。如果没有,添加如下依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

    - **配置`RestTemplate`(有多种方式,这里展示一种简单的Bean配置方式)**:
     - 在一个配置类(例如`AppConfig.java`)中,通过`@Configuration`注解将其标记为配置类,然后定义`RestTemplate`的Bean。示例如下:
       ```java

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

       @Configuration
       public class AppConfig {
         @Bean
         public RestTemplate restTemplate() {
           return new RestTemplate();
         }
       }

在服务类中使用RestTemplate访问第三方接口

假设要访问一个天气查询接口(以高德地图天气接口https://restapi.amap.com/v3/weather/weatherInfo为例),创建一个服务类(例如WeatherService.java)。示例如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.{insert\_element\_0\_c3RlcmVvdHlwZS4=}Service;
import org.springframework.web.client.RestTemplate;

@Service
public class WeatherService {
  private final RestTemplate restTemplate;

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

  public String getWeatherData(String city, String apiKey) {
    String url = "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + apiKey;
    ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
    return response.getBody();
  }
}

    - 在上述代码中:
       - 首先通过构造函数注入`RestTemplate`。
       - 然后在`getWeatherData`方法中,构建了请求的URL,包含城市名称(`city`)和API密钥(`apiKey`)等参数。使用`restTemplate.getForEntity`方法发送GET请求,获取`ResponseEntity`对象,最后返回响应体的内容(即天气数据)。
   - **在控制器中调用服务方法(以暴露接口供外部访问)**:
     - 创建一个控制器类(例如`WeatherController.java`)。示例如下:
       ```java

       import org.springframework.beans.factory.annotation.Autowired;
       import org.springframework.web.bind.annotation.GetMapping;
       import org.springframework.web.bind.annotation.RequestMapping;
       import org.springframework.web.bind.annotation.RequestParam;
       import org.springframework.web.bind.annotation.RestController;

       @RestController
       @RequestMapping("/weather")
       public class WeatherController {
         private final WeatherService weatherService;

         @Autowired
         public WeatherController(WeatherService weatherService) {
           this.weatherService = weatherService;
         }

         @GetMapping("/data")
         public String getWeatherData(@RequestParam("city") String city, @RequestParam("key") String key) {
           return weatherService.getWeatherData(city, key);
         }
       }
  • 在这个控制器中,同样通过构造函数注入WeatherService。定义了一个/weather/data的 GET 请求接口,通过@RequestParam注解获取城市名称和 API密钥参数,然后调用WeatherServicegetWeatherData方法获取天气数据并返回。

操作完以上代码使用postman测试:

 请求接口地址:http://localhost:8888/weather/data?city=城市&key=xxxxxxxxxxxxx

官方地址:天气查询-基础 API 文档-开发指南-Web服务 API | 高德地图API