All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.net.wanmo.common.restful.SendUtil Maven / Gradle / Ivy

There is a newer version: 1.3.9
Show newest version
package cn.net.wanmo.common.restful;

import cn.net.wanmo.common.http.HttpUtil;
import cn.net.wanmo.common.http.pojo.ResData;
//import cn.net.wanmo.common.pojo.HttpResult;
//import cn.net.wanmo.common.pojo.InterfaceResult;
import cn.net.wanmo.common.restful.body.Req;
import cn.net.wanmo.common.restful.body.Res;
import cn.net.wanmo.common.result.HttpResult;
import cn.net.wanmo.common.result.InterfaceResult;
import cn.net.wanmo.common.util.DateUtil;
import org.slf4j.Logger;

import java.util.Map;

public class SendUtil {

    /**
     * 发送 get 请求,请求体的 toString() 应该是 name1=value1&name2=value2 的形式
     *
     * @param msgPre        接口名称
     * @param url           请求地址
     * @param requestObj    请求对象
     * @param responseObj   响应对象
     * @param logger        日志对象
     * @param   请求对象类型
     * @param  响应对象类型
     * @return 响应数据
     */
    public static  InterfaceResult sendGet(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Logger logger) {
        return sendGet(msgPre, url, requestObj, responseObj, null, logger);
    }

    /**
     * 发送 get 请求,请求体的 toString() 应该是 name1=value1&name2=value2 的形式
     *
     * @param msgPre        接口名称
     * @param url           请求地址
     * @param requestObj    请求对象
     * @param responseObj   响应对象
     * @param header        通用的请求属性
     * @param logger        日志对象
     * @param   请求对象类型
     * @param  响应对象类型
     * @return 响应数据
     */
    public static  InterfaceResult sendGet(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger) {
        return sendExec(msgPre, url, requestObj, responseObj, header, logger, SendWay.GET);
    }


    /**
     * 发送 post 请求,请求体的 toString() 应该是 name1=value1&name2=value2 的形式
     *
     * @param msgPre        接口名称
     * @param url           请求地址
     * @param requestObj    请求对象
     * @param responseObj   响应对象
     * @param logger        日志对象
     * @param   请求对象类型
     * @param  响应对象类型
     * @return 响应数据
     */
    public static  InterfaceResult sendPost(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Logger logger) {
        return sendPost(msgPre, url, requestObj, responseObj, null, logger);
    }

    /**
     * 发送 post 请求,请求体的 toString() 应该是 name1=value1&name2=value2 的形式
     *
     * @param msgPre        接口名称
     * @param url           请求地址
     * @param requestObj    请求对象
     * @param responseObj   响应对象
     * @param header        通用的请求属性
     * @param logger        日志对象
     * @param   请求对象类型
     * @param  响应对象类型
     * @return 响应数据
     */
    public static  InterfaceResult sendPost(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger) {
        return sendExec(msgPre, url, requestObj, responseObj, header, logger, SendWay.POST);
    }

    /**
     * 发送 post 请求,请求体的 toString() 应该是 json 字符串。例如: {name1:value1,name2:value2}
     *
     * @param msgPre        接口名称
     * @param url           请求地址
     * @param requestObj    请求对象
     * @param responseObj   响应对象
     * @param logger        日志对象
     * @param   请求对象类型
     * @param  响应对象类型
     * @return 响应数据
     */
    public static  InterfaceResult sendPostForJson(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Logger logger) {
        return sendPostForJson(msgPre, url, requestObj, responseObj, null, logger);
    }

    /**
     * 发送 post 请求,请求体的 toString() 应该是 json 字符串。例如: {name1:value1,name2:value2}
     *
     * @param msgPre        接口名称
     * @param url           请求地址
     * @param requestObj    请求对象
     * @param responseObj   响应对象
     * @param header        通用的请求属性
     * @param logger        日志对象
     * @param   请求对象类型
     * @param  响应对象类型
     * @return 响应数据
     */
    public static  InterfaceResult sendPostForJson(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger) {
        return sendExec(msgPre, url, requestObj, responseObj, header, logger, SendWay.POST_JSON);
    }

    /**
     * 发送 upload 请求,请求体的 toString() 应该是 json 字符串。例如: {name1:value1,name2:value2}
     *
     * @param msgPre        接口名称
     * @param url           请求地址
     * @param requestObj    请求对象
     * @param responseObj   响应对象
     * @param logger        日志对象
     * @param   请求对象类型
     * @param  响应对象类型
     * @return 响应数据
     */
    public static  InterfaceResult upload(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Logger logger) {
        return sendExec(msgPre, url, requestObj, responseObj, null, logger, SendWay.UPLOAD);
    }

    /**
     * 发送 upload 请求,请求体的 toString() 应该是 json 字符串。例如: {name1:value1,name2:value2}
     *
     * @param msgPre        接口名称
     * @param url           请求地址
     * @param requestObj    请求对象
     * @param responseObj   响应对象
     * @param header        通用的请求属性
     * @param logger        日志对象
     * @param   请求对象类型
     * @param  响应对象类型
     * @return 响应数据
     */
    public static  InterfaceResult upload(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger) {
        return sendExec(msgPre, url, requestObj, responseObj, header, logger, SendWay.UPLOAD);
    }

    /**
     * 发送 http 请求
* get要求请求体:请求参数应该是 name1=value1&name2=value2 的形式 * * @param msgPre 接口名称 * @param url 请求地址 * @param requestObj 请求对象 * @param responseObj 响应对象 * @param header 通用的请求属性 * @param logger 日志对象 * @param sendWay 请求方式 * @param 请求对象类型 * @param 响应对象类型 * @return 响应数据 */ public static InterfaceResult sendExec(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger, SendWay sendWay) { InterfaceResult result = new InterfaceResult<>(); try { HttpResult httpResult = null; { // 执行 HTTP 请求 String requestObjBody = requestObj.getBody(); logger.info(msgPre + "请求体:{}", requestObjBody); switch (sendWay) { case GET: httpResult = HttpUtil.get(url, header, requestObjBody); break; case POST: httpResult = HttpUtil.post(url, header, requestObjBody); break; case POST_JSON: httpResult = HttpUtil.postJson(url, header, requestObjBody); break; case UPLOAD: httpResult = HttpUtil.upload(url, header, requestObj.getUploader()); break; default: httpResult = new HttpResult<>(); httpResult.error("该 HTTP 请求方式不支持"); } logger.info(msgPre + "响应体:{}", httpResult.getData()); } if (httpResult.isSuccess()) { // 请求 HTTP 成功 ResData resData = httpResult.getData(); responseObj.setBody(resData.getBody()); responseObj.setResTime(DateUtil.nowLong()); // 设置响应时间 responseObj.setConsumeTime(responseObj.getResTime() - requestObj.getReqTime()); // 计算耗时 if (responseObj.isSuccess()) { // 接口响应成功数据 result.success(msgPre + responseObj.getErrMsg(), responseObj); logger.info(result.toJSONString()); } else { // 接口响应失败数据 result.fail(String.valueOf(responseObj.getErrCode()), msgPre + responseObj.getErrMsg(), responseObj); logger.warn(result.toJSONString()); } result.setConsumeTime(responseObj.getConsumeTime()); } else { // 请求 HTTP 失败 responseObj.setErrCode(String.valueOf(httpResult.getCode())); responseObj.setErrMsg(httpResult.getMsg()); responseObj.setResTime(DateUtil.nowLong()); // 设置响应时间 responseObj.setConsumeTime(responseObj.getResTime() - requestObj.getReqTime()); // 计算耗时 result.error(String.format("%s接口调用失败:HTTP状态码 (%d),HTTP错误消息 (%s)", msgPre, httpResult.getCode(), httpResult.getMsg()), responseObj); result.setConsumeTime(responseObj.getConsumeTime()); logger.error(result.toJSONString()); } } catch (Exception e) { // 执行异常 responseObj.setErrCode("exception"); responseObj.setErrMsg(e.getMessage()); responseObj.setResTime(DateUtil.nowLong()); // 设置响应时间 responseObj.setConsumeTime(responseObj.getResTime() - requestObj.getReqTime()); // 计算耗时 result.error(msgPre + "发生异常:" + e.getMessage(), responseObj); result.setConsumeTime(responseObj.getConsumeTime()); logger.error(result.getMsg(), e); } return result; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy