vue2+spring boot项目,使用RestTemplate工具类,实现在后台访问第三方API接口

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();
	}
    
	
}

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值