SpringBoot项目通过http请求接口
前言
由于部分业务需要取平台其他系统的数据,经讨论后决定通过http请求url的方式获取数据
提示:以下是本篇文章正文内容,下面案例可供参考
一、主要类和方法?
UriComponentsBuilder
是Spring Framework中的一个用于构建URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)的实用程序类。它提供了一种简单的方式来构建包含各种部分(如协议、主机、路径、查询参数等)的URI和URL,并支持对这些部分进行修改、替换和合并等操作
restTemplate.exchange()
使用 RestTemplate 的 exchange 方法发送 HTTP 请求,传入 URL、请求方法类型 HttpMethod.*、HttpEntity 对象和响应类型,返回ResponseEntity对象。
二、使用步骤
1.引入相应依赖
代码如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.26</version>
</dependency>
2.请求url获取登录token(若请求不需要token验证则直接请求即可)
代码如下(示例):从指定的登录URL(loginUrl)获取一个token
public String getToken(String loginUrl,String userName,String passWord){
//使用 UriComponentsBuilder 构建带有用户名和密码参数的请求 URL
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(loginUrl)
.queryParam("userName", userName)
.queryParam("pwd", passWord);
//使用 RestTemplate 的 exchange 方法发送 HTTP GET 请求,传入构建好的 URL、请求方法 HttpMethod.GET、null(因为这里不需要设置特定的请求头信息或实体内容)、以及响应类型 String.class
ResponseEntity<String> responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, null, String.class);
//获取响应的字符串形式的 body
String body = responseEntity.getBody();
//使用 JSON.parseObject 方法将 body 解析为一个 JSONObject 对象
JSONObject jsonObj = JSON.parseObject(body);
//从 JSONObject 中获取 key 为 "data" 的值,这个值是一个 String 类型的 token
String token = (String) jsonObj.get("data");
return token;
}
3.请求目的url
代码如下(示例):将token放入HttpEntity中
public List<DataObj> getCoalZhDay(String sdate, String edate) {
/*创建一个 HttpHeaders 对象,并设置 Authorization 头部为给定的 token*/
String token = getToken.getToken(loginUrl,userName,passWord);
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token);
HttpEntity<String> entity = new HttpEntity<>(headers); //创建一个 HttpEntity 对象,将上面创建的 HttpHeaders 对象作为参数传入
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(getLicencePlantUrl)
.queryParam("sdate", sdate)
.queryParam("pageSize", 2000)
.queryParam("edate", edate); //使用 UriComponentsBuilder 构建请求的 URL,同时添加查询参数 sdate、pageSize 和 edate
String s = builder.toUriString(); //将构建好的 URL 转换为一个字符串
ResponseEntity<String> responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class); //使用 RestTemplate 的 exchange 方法发送 HTTP GET 请求,传入 URL、请求方法 HttpMethod.GET、HttpEntity 对象和响应类型 String.class
String body = responseEntity.getBody(); //获取响应的字符串形式的 body
JSONObject jsonObject = JSON.parseObject(body); //使用 JSON.parseObject 方法将 body 解析为一个 JSONObject 对象
/**根据 jsonObject 具体值获取相应的数据,具体情况可能不同*/
Map<String, Object> map = (Map)jsonObject.get("value"); //从 JSONObject 中获取 key 为 "value" 的值,并将其转换为一个 Map 对象
List<Map<String, String>> value = (List) map.get("pageData"); // 从 Map 中获取 key 为 "pageData" 的值,这个值应该是一个 List<Map<String, String>> 类型的数据
/*数据处理*/
List<DataObj> dataObjList = new ArrayList<>();
value.forEach(item ->{
DataObj dataObj= new DataObj();
//数据处理逻辑
dataObjList.add(dataObj);
}
return dataObjList;
}