package com.test.xsj.until;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.*;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author xsj
* @date 2022/6/23 10:11
*/
@Log4j2
public class HttpUtil {
/**
* @param method 请求方法:GET、POST
* @param url 请求路径
* @param headers 请求header
* @param params 请求参数
* @param mediaType contentType类型 例如:JSON
* @return
*/
public static String proxyToDesURL(String method, String url, Map<String, String> headers,
Map<String, String> params, MediaType mediaType) {
try {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
RestTemplate restTemplate = new RestTemplate(requestFactory);
//处理请求头部
HttpHeaders requestHeaders = new HttpHeaders();
if (headers != null && !headers.isEmpty()) {
Set<String> sets = headers.keySet();
for (String set : sets) {
String value = headers.get(set);
requestHeaders.add(set, value);
}
}
//处理请求参数
HashMap<String, String> paramList = new HashMap<>();
if (params != null && !params.isEmpty()) {
if (method.equalsIgnoreCase("GET")) {
StringBuilder sb = new StringBuilder(url + "?");
Set<String> setList = params.keySet();
for (String key : setList) {
String value = params.get(key);
sb.append(key).append("=").append(value).append("&");
}
url = sb.substring(0, sb.length() - 1);//去掉最后一个&字符
} else {
Set<String> setList = params.keySet();
for (String key : setList) {
String value = params.get(key);
paramList.put(key, value);
}
}
}
requestHeaders.setContentType(mediaType);
HttpEntity<HashMap<String, String>> requestEntity = new HttpEntity<>(
paramList, requestHeaders);
//处理请求方法
HttpMethod requestType;
method = method.toUpperCase();
switch (method) {
case "GET":
requestType = HttpMethod.GET;
break;
case "POST":
requestType = HttpMethod.POST;
break;
default:
requestType = HttpMethod.GET;
break;
}
ResponseEntity<String> responseEntity = restTemplate.exchange(url, requestType, requestEntity,
String.class, paramList);
//获取返回结果
return responseEntity.getBody();
} catch (Exception e) {
log.error("请求错误:", e);
e.printStackTrace();
}
return null;
}
/**
* get请求,JSON解析
*
* @param url
* @param headers
* @param params
* @return
*/
public static JSONObject get(String url, Map<String, String> headers, Map<String, String> params) {
return JSON.parseObject(proxyToDesURL("get", url, headers, params, MediaType.APPLICATION_JSON));
}
/**
* POST请求 JSON格式
*
* @return
*/
public static JSONObject postJson(String url, Map<String, String> headers, Map<String, String> params) {
return JSON.parseObject(proxyToDesURL("post", url, headers, params, MediaType.APPLICATION_JSON));
}
}
工具类之接口同步请求
最新推荐文章于 2023-05-17 14:51:57 发布