访问外部http接口

博客简介

在 springBoot 后台中,发起 http 的 get、post 请求,编写 HttpUtil 工具类,记录代码

一、引入类库

pom 文件中引入 httpclient 类库

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.5</version>
</dependency>

二、编写工具类

编写程序请求中所需的请求 工具类

package com.water.common.utils;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

/**
* @ClassName: HttpClient
* @Description: http的请求工具类
* @version V1.0
*/
@Service
public class HttpClientUtil {

    public String client(String url, HttpMethod method, MultiValueMap<String, String> params) {
        RestTemplate template = new RestTemplate();
        ResponseEntity<String> responseEntity = template.getForEntity(url, String.class);
        return responseEntity.getBody();
    }
}

三、调用实例

在application.properties 中配置http的访问地址

url.userrights=http://127.0.0.1:8082/

编写请求的调用实例

// api地址
@Value("${url.userrights}")
private String userRightsUrl;

@Autowired
private HttpClientUtil httpClient;

@Override
public String testConnection(String json) throws Exception {
    String url = "xxx/api?abc=1";
    HttpMethod method = HttpMethod.GET;
    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
    String apiUrl = userRightsUrl + url
    String result = httpClient.client(apiUrl, method, params);
    System.out.println(result);
    return result;
}

四、附http工具类

附一个请求类型和参数更多的 http请求 工具类,供大家参考

package com.water.utils;

import java.util.List;

import org.apache.commons.beanutils.DynaBean;
import org.aspectj.weaver.ast.Var;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
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 com.water.common.utils.DynaBeanPluginsUtil;
import com.water.common.utils.JsonPluginsUtil;
import com.water.common.utils.Util;
/**
 * @ClassName: HttpClient 
 * @Description: http的请求工具类 
 * @version V1.0
 */
@Service
public class HttpClientUtil {
	
	/**
	 * @Title: client 
	 * @Description: 普通get方式
	 * @param @param url
	 * @param @param method
	 * @param @param params
	 * @param @return
	 * @return String
	 * @version V1.0
	 */
	public String clientGet(String url) {
		RestTemplate template = new RestTemplate();
		ResponseEntity<String> responseEntity = template.getForEntity(url, String.class);
		return responseEntity.getBody();
	}
	
	/**
	 * @Title: clientWithHeader 
	 * @Description: 带有单个header的获取方式
	 * @param @param url
	 * @param @param method
	 * @param @param params
	 * @param @return
	 * @return String
	 * @version V1.0
	 */
	public String clientGet(String url, String hKey, String hVal) {
		RestTemplate template = new RestTemplate();
		HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.add(hKey, hVal);
        HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
		ResponseEntity<String> responseEntity = template.exchange(url, HttpMethod.GET, requestEntity, String.class);
		return responseEntity.getBody();
	}
	
	/**
	 * @Title: client 
	 * @Description: 带有多个header的获取方式
	 * @param @param url
	 * @param @param method
	 * @param @param params
	 * @param @param hList
	 * @param @return
	 * @return String
	 * @version V1.0
	 */
	public String client(String url, HttpMethod method, MultiValueMap<String, String> params, 
			List<DynaBean> hList) {
		RestTemplate template = new RestTemplate();
		HttpHeaders requestHeaders = new HttpHeaders();
		for(DynaBean dynaBean : hList) {
			String hKey = Util.toString(dynaBean.get("key"));
			String hVal = Util.toString(dynaBean.get("val"));
			requestHeaders.add(hKey, hVal);
		}
        HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
		ResponseEntity<String> responseEntity = template.exchange(url, method, requestEntity, String.class);
		return responseEntity.getBody();
	}
	
	/**
	 * @Title: clientPost 
	 * @Description: 发送post的http请求
	 * @param @param url
	 * @param @param params
	 * @param @return
	 * @return String
	 * @version V1.0     
	 */
    public String clientPost(String url, String json){
        RestTemplate client = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        HttpMethod method = HttpMethod.POST;
        // 以表单的方式提交
        headers.setContentType(MediaType.APPLICATION_JSON);
        //将请求头部和参数合成一个请求
        HttpEntity<String> requestEntity = new HttpEntity<>(json, headers);
        //执行HTTP请求,将返回的结构使用ResultVO类格式化
        ResponseEntity<String> response = client.exchange(url, method, requestEntity, String.class);
        return response.getBody();
    }
}