工具类之接口同步请求

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖是人情世故

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值