1.定义访问工具类,一般访问第三方接口首先需要获取token。
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import org.apache.commons.codec.language.Caverphone2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import cn.hutool.json.JSONUtil;
@Service
public class RequestUtil {
// 接口访问类
private RestTemplate restTemplate;
// 需要获取token的参数信息,不同三方提供的获取token参数不同。
private String url = "xxx.xxx.xxx.xxx";
private String client_id = "xxxxx";
private String client_secret = "xxxxx";
private String grant_type = "xxxxxx";
private String response_type = "xxxxxx";
// 构造方法
public RequestUtil() {
this.restTemplate = new RestTemplate();
}
/**
* 获取第三方接口的token
* */
public Map<String,String> getToken() {
ResponseEntity<Map> response = restTemplate.getForEntity(url+
"/api/getToken.htm?client_id={client_id}
&client_secret={client_secret}
&grant_type={grant_type}
&response_type={response_type}",
Map.class, client_id,
client_secret,
grant_type,
response_type);
return response.getBody();
}
}
2.使用GET方法访问,例如访问http://127.0.0.1:8080/api/getUserInfo.html?uid="f8151fdadsfasasd",查询用户信息
/**
* 查询用户信息
* */
public String getUseInfoGET(String uid){
// 1.设置请求头,此处为固定配置
HttpHeaders headers = new HttpHeaders();
// 获取token的方法前面已经定义
String token = this.getToken().get("accessToken");
headers.add("Authorization", "Bearer "+token);
headers.add("Content-Type", "application/json");
// 2.创建请求参数集合,因为GET方式没有请求体的概念
MultiValueMap<String,String> params = new LinkedMultiValueMap<String, String>();
params.add("uid", uid);
// 3.构建URL并添加请求参数
URI uri = UriComponentsBuilder.fromUriString(url+"/api/getUserInfo.html")
.queryParams(params)
.build()
.toUri();
// 4.添加请求头
HttpEntity<String> requestEntity = new HttpEntity<String>(headers);
// 5.发送请求
ResponseEntity<String> response =
restTemplate.exchange(uri,HttpMethod.GET,requestEntity, String.class);
return response.getBody();
}
3.使用POST方式访问
3.1 使用post访问,一般会将请求体封装为一个实体类
public class ReqUserBody{
private String uid;
public void setUid(String uid){
this.uid = uid;
}
public String getUid(){
return uid;
}
}
3.2 构造POST请求方法
/**
* 使用POST获取用户信息
* */
public String getUserInfoPOST(ReqUserBody reqUserBody) {
/** 1.设置请求头,固定配置 */
HttpHeaders headers = new HttpHeaders();
// 获取token的方法,前面已经定义
String token = this.getToken().get("accessToken");
// 将token添加到请求头中,固定配置
headers.add("Authorization", "Bearer "+token);
headers.add("Content-Type", "application/json");
/** 2.设置请求头和请求体 */
HttpEntity<List<RequestCUSealBody>> requestEntity = new HttpEntity<List<RequestCUSealBody>>(reqUserBody,headers);
// 向第三方接口发起请求
ResponseEntity<String> response = restTemplate.exchange(url+"/api/getUserInfo.html",HttpMethod.POST,requestEntity, String.class);
return response.getBody();
}
4.全部代码
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import org.apache.commons.codec.language.Caverphone2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import cn.hutool.json.JSONUtil;
@Service
public class RequestUtil {
// 接口访问类
private RestTemplate restTemplate;
// 需要获取token的参数信息,不同三方提供的获取token参数不同。
private String url = "xxx.xxx.xxx.xxx";
private String client_id = "xxxxx";
private String client_secret = "xxxxx";
private String grant_type = "xxxxxx";
private String response_type = "xxxxxx";
// 构造方法
public RequestUtil() {
this.restTemplate = new RestTemplate();
}
/**
* 获取第三方接口的token
* */
public Map<String,String> getToken() {
ResponseEntity<Map> response = restTemplate.getForEntity(url+
"/api/getToken.htm?client_id={client_id}
&client_secret={client_secret}
&grant_type={grant_type}
&response_type={response_type}",
Map.class, client_id,
client_secret,
grant_type,
response_type);
return response.getBody();
}
/**
* 查询用户信息,使用get方法
* */
public String getUseInfoGET(String uid){
// 1.设置请求头,此处为固定配置
HttpHeaders headers = new HttpHeaders();
// 获取token的方法前面已经定义
String token = this.getToken().get("accessToken");
headers.add("Authorization", "Bearer "+token);
headers.add("Content-Type", "application/json");
// 2.创建请求参数集合,因为GET方式没有请求体的概念
MultiValueMap<String,String> params = new LinkedMultiValueMap<String, String>();
params.add("uid", uid);
// 3.构建URL并添加请求参数
URI uri = UriComponentsBuilder.fromUriString(url+"/api/getUserInfo.html")
.queryParams(params)
.build()
.toUri();
// 4.添加请求头
HttpEntity<String> requestEntity = new HttpEntity<String>(headers);
// 5.发送请求
ResponseEntity<String> response =
restTemplate.exchange(uri,HttpMethod.GET,requestEntity, String.class);
return response.getBody();
}
/**
* 使用POST获取用户信息
* */
public String getUserInfoPOST(ReqUserBody reqUserBody) {
/** 1.设置请求头,固定配置 */
HttpHeaders headers = new HttpHeaders();
// 获取token的方法,前面已经定义
String token = this.getToken().get("accessToken");
// 将token添加到请求头中,固定配置
headers.add("Authorization", "Bearer "+token);
headers.add("Content-Type", "application/json");
/** 2.设置请求头和请求体 */
HttpEntity<List<RequestCUSealBody>> requestEntity = new HttpEntity<List<RequestCUSealBody>>(reqUserBody,headers);
// 向第三方接口发起请求
ResponseEntity<String> response = restTemplate.exchange(url+"/api/getUserInfo.html",HttpMethod.POST,requestEntity,String.class);
return response.getBody();
}
}