如何通过http请求调用外部接口工具类(POST/GET)

package com.jty.configurationtask.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.JtyLogger;

import java.util.List;
import java.util.Map;
import java.util.Objects;


/**
 * @Title: <p>GetDataFromConfigurationCenterUtil</p>
 * @Description: <p>调用外部接口工具类</p>
 * @author: 
 * @Date: 2019/8/13 15:15
 * @version: 1.0
 * @Copyright: . All rights reserved.
 */
public class GetDataFromConfigurationCenterUtil {

	private static JtyLogger logger = JtyLogger.getLogger(GetDataFromConfigurationCenterUtil.class, "调用外部接口工具类");

	/**
	 * 成功返回代码
	 */
	private static final String SUCCESS_CODE = "0";

	/**
	 * 成功返回消息
	 */
	private static final String SUCCESS_MSG = "success";

	/**
	 * @Title: <p>getObjectBySendPostReqs</p>
	 * @Description: <p>向外部接口发送POST请求,返回的数据为单个数据</p>
	 * @param url 请求的url
	 * @param reqObj 请求参数对象
	 * @param valueType 返回值映射类型
	 * @param outSideInterfaceName    外部接口中文名称
	 * @return: T
	 * @author: 
	 * @Date: 2019/8/13 15:52
	 * @throws
	 * @version: 1.0
	 * @Copyright: . All rights reserved.
	 */
	public static <T> T getObjectBySendPostReqs(String url, Object reqObj, Class<T> valueType,String outSideInterfaceName) {

		/**
		 * 1.入参日志
		 */
		logger.info("[向【" + outSideInterfaceName + "】发送POST请求,返回的数据为单个数据]入参:url=" + url + ",reqObj:" + reqObj
				+ ",valueType=" + valueType + ",outSideInterfaceName" + outSideInterfaceName);

		/**
		 * 2.校验
		 */
		if (StringUtils.isBlank(url)) {

			logger.error("[向【" + outSideInterfaceName + "】发送POST请求,返回的数据为单个数据]入参URL为空!参数异常!直接返回null");
			return null;
		}

		/**
		 * 4.开始请求
		 */
		try {

			HttpResponse<String> response = Unirest.post(url)
					.header("accept", "application/json;charset=UTF-8")
					.field("param", JSON.toJSONString(reqObj))
					.asString();

			/**
			 * 5.返回值校验
			 */
			if (null == response) {
				logger.error("从【" + outSideInterfaceName + "】获取数据失败!链接为:" + url + ",请求参数为:" + reqObj);
				return null;
			}

			JSONObject result = JSONObject.parseObject(response.getBody());

			if (null == result) {
				logger.error("从【" + outSideInterfaceName + "】获取数据失败!链接为:" + url + ",请求参数为:" + reqObj);
				return null;
			}
			logger.info("从【" + outSideInterfaceName + "】获取到的数据为:" + result);

			/**
			 * 6.返回值解析
			 */
			String code = result.getString("code");
			String msg = result.getString("msg");
			String data = result.getString("data");
			if (Objects.equals(code, SUCCESS_CODE) && Objects.equals(msg, SUCCESS_MSG)) {

				T object = JSONObject.parseObject(result.toString(), valueType);

				/**
				 * 7.出参日志
				 */
				logger.info("[向【" + outSideInterfaceName + "】发送POST请求,返回的数据为单个数据]出参:=" + object + "数据data=" + data);

				/**
				 * 8.数据返回
				 */
				return object;
			}

		} catch (Exception e) {

			/**
			 * 8.异常捕捉
			 */
			logger.error("从【" + outSideInterfaceName + "】获取数据错误:", e);
		}

		return null;
	}


	/**
	 * @Title: <p>getListBySendPostReqs</p>
	 * @Description: <p>向外部接口发送POST请求,返回的数据为多条数据list</p>
	 * @param url 请求的url
	 * @param reqMap 请求参数集合
	 * @param valueType 返回值映射类型
	 * @param outSideInterfaceName    外部接口中文名称
	 * @return: java.util.List<T>
	 * @author: 
	 * @Date: 2019/8/13 15:53
	 * @throws
	 * @version: 1.0
	 * @Copyright: . All rights reserved.
	 */
	public static <T> List<T> getListBySendPostReqs(String url, Map<String, Object> reqMap, Class<T> valueType,String outSideInterfaceName) {

		/**
		 * 1.入参日志
		 */
		logger.info("[向【" + outSideInterfaceName + "】发送POST请求,返回的数据为多条数据]入参:url=" + url + ",reqMap:" + reqMap.entrySet().toString()
				+ ",valueType=" + valueType + ",outSideInterfaceName" + outSideInterfaceName);

		/**
		 * 2.校验
		 */
		if (StringUtils.isBlank(url)) {

			logger.error("[向【" + outSideInterfaceName + "】发送POST请求,返回的数据为多条数据]入参URL为空!参数异常!直接返回null");
			return null;
		}

		/**
		 * 4.开始请求
		 */
		try {
			HttpResponse<String> response = Unirest.post(url)
					.header("accept", "application/json")
					.fields(reqMap)
					.asString();

			/**
			 * 5.返回值校验
			 */
			if (null == response) {
				logger.error("从【" + outSideInterfaceName + "】获取数据失败!链接为:" + url + ",请求参数为:" + reqMap);
				return null;
			}

			JSONObject result = JSONObject.parseObject(response.getBody()).getJSONObject("reply").getJSONObject("result");
			if (null == result) {
				logger.error("从【" + outSideInterfaceName + "】获取数据失败!链接为:" + url + ",请求参数为:" + reqMap);
				return null;
			}
			logger.info("从【" + outSideInterfaceName + "】获取到的数据为:" + result);

			/**
			 * 6.返回值解析
			 */
			Integer code = result.getInteger("code");
			Boolean res = result.getBooleanValue("res");
			String r = result.getString("r");

			if (Objects.equals(code, 0) && res && null != r) {

				List<T> list = JSONObject.parseArray(r, valueType);

				/**
				 * 7.出参日志
				 */
				logger.info("[向【" + outSideInterfaceName + "】发送POST请求,返回的数据为单个数据]出参:=" + list);

				/**
				 * 8.数据返回
				 */
				return list;
			}

		} catch (Exception e) {

			/**
			 * 9.异常捕捉
			 */
			logger.error("从【" + outSideInterfaceName + "】获取数据错误:", e);

		}

		return null;
	}

}
发布了203 篇原创文章 · 获赞 136 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/u012045045/article/details/102524932