RestTemplate是由 Spring 提供的一个 HTTP 请求工具,我们通过它来请求获取一个接口中的数据
https://c.m.163.com/ug/api/wuhan/app/data/list-total
这个是网易给的新冠疫情实时数据
我们用RestTemplate来获取数据,并进行后续的处理,封装到每一个pojo对象
1. 先导包
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.3</version>
</dependency>
2. 写配置类 RestTemplateConfig
/**
* RestTemplateConfig: HTTP 请求工具
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate getRestTemplate(){
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
// ConnectTimeout只有在网络正常的情况下才有效,因此两个一般都设置
requestFactory.setConnectTimeout(5000); //建立连接的超时时间 5秒
requestFactory.setReadTimeout(5000); //传递数据的超时时间(在网络抖动的情况下,这个参数很有用)
HttpHeaders headers = new HttpHeaders();
headers.add("user-agent","Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36" +
"(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
HttpEntity<Resource> httpEntity = new HttpEntity<>(headers);
RestTemplate restTemplate = new RestTemplate(requestFactory);
return restTemplate;
}
}
3. 获取数据
@Resource
RestTemplate restTemplate;
//调用api 获得疫情数据
public String getJSONString(){
//请求头
HttpHeaders headers=new HttpHeaders();
headers.add("user-agent","Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebkit/537.36"+
"(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
//请求体
HttpEntity<Resource> httpEntity=new HttpEntity<>(headers);
String url="https://c.m.163.com/ug/api/wuhan/app/data/list-total";
String jsonString=restTemplate.exchange(url, HttpMethod.GET,httpEntity, String.class).getBody();
return jsonString;
}
然后就可以获得接口中的数据了
4. 详细解析下RestTemplate是怎么用的
1. 先看看配置类
- ClientHttpRequestFactory
它是个函数式接口,用于根据URI和HttpMethod创建出一个ClientHttpRequest来发送请求 - 创建请求头和请求体
请求头是直接打开浏览器,随便找个网页打开检查,然后点开Network,随便找一条里面的Request Headers,复制里面的“User-Agent” 作为请求头 - 然后把requestFactory放入到RestTemplate中,这样配置类就写好了
2. 具体获取
- 重复上面这样写请求头和请求体
- 导入工具 RestTemplate
- 调用方法
restTemplate.exchange(url, HttpMethod.GET,httpEntity, String.class).getBody();
- url就是我们需要的接口数据
成功获得我们要的数据
后续就对这对数据处理:JSONPath.read(json,path)
像这样就获取到了reqId
ps:
$ 就是根对象