访问外部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();
    }
}
