添加依赖(如果尚未添加)
在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密钥参数,然后调用WeatherService
的getWeatherData
方法获取天气数据并返回。
操作完以上代码使用postman测试:
请求接口地址:http://localhost:8888/weather/data?city=城市&key=xxxxxxxxxxxxx