Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
cn.net.wanmo.common.restful.SendUtil Maven / Gradle / Ivy
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 cn.net.wanmo.common.util.ObjectUtil;
import org.slf4j.Logger;
import java.io.Serializable;
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 , Code extends Serializable> InterfaceResult sendGet(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Logger logger, Class codeClass) {
return sendGet(msgPre, url, requestObj, responseObj, null, logger, codeClass);
}
/**
* 发送 get 请求,请求体的 toString() 应该是 name1=value1&name2=value2 的形式
*
* @param msgPre 接口名称
* @param url 请求地址
* @param requestObj 请求对象
* @param responseObj 响应对象
* @param header 通用的请求属性
* @param logger 日志对象
* @param 请求对象类型
* @param 响应对象类型
* @return 响应数据
*/
public static , Code extends Serializable> InterfaceResult sendGet(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger, Class codeClass) {
return sendExec(msgPre, url, requestObj, responseObj, header, logger, SendWay.GET, codeClass);
}
/**
* 发送 post 请求,请求体的 toString() 应该是 name1=value1&name2=value2 的形式
*
* @param msgPre 接口名称
* @param url 请求地址
* @param requestObj 请求对象
* @param responseObj 响应对象
* @param logger 日志对象
* @param 请求对象类型
* @param 响应对象类型
* @return 响应数据
*/
public static , Code extends Serializable> InterfaceResult sendPost(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Logger logger, Class codeClass) {
return sendPost(msgPre, url, requestObj, responseObj, null, logger, codeClass);
}
/**
* 发送 post 请求,请求体的 toString() 应该是 name1=value1&name2=value2 的形式
*
* @param msgPre 接口名称
* @param url 请求地址
* @param requestObj 请求对象
* @param responseObj 响应对象
* @param header 通用的请求属性
* @param logger 日志对象
* @param 请求对象类型
* @param 响应对象类型
* @return 响应数据
*/
public static , Code extends Serializable> InterfaceResult sendPost(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger, Class codeClass) {
return sendExec(msgPre, url, requestObj, responseObj, header, logger, SendWay.POST, codeClass);
}
/**
* 发送 post 请求,请求体的 toString() 应该是 json 字符串。例如: {name1:value1,name2:value2}
*
* @param msgPre 接口名称
* @param url 请求地址
* @param requestObj 请求对象
* @param responseObj 响应对象
* @param logger 日志对象
* @param 请求对象类型
* @param 响应对象类型
* @return 响应数据
*/
public static , Code extends Serializable> InterfaceResult sendPostForJson(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Logger logger, Class codeClass) {
return sendPostForJson(msgPre, url, requestObj, responseObj, null, logger, codeClass);
}
/**
* 发送 post 请求,请求体的 toString() 应该是 json 字符串。例如: {name1:value1,name2:value2}
*
* @param msgPre 接口名称
* @param url 请求地址
* @param requestObj 请求对象
* @param responseObj 响应对象
* @param header 通用的请求属性
* @param logger 日志对象
* @param 请求对象类型
* @param 响应对象类型
* @return 响应数据
*/
public static , Code extends Serializable> InterfaceResult sendPostForJson(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger, Class codeClass) {
return sendExec(msgPre, url, requestObj, responseObj, header, logger, SendWay.POST_JSON, codeClass);
}
/**
* 发送 upload 请求,请求体的 toString() 应该是 json 字符串。例如: {name1:value1,name2:value2}
*
* @param msgPre 接口名称
* @param url 请求地址
* @param requestObj 请求对象
* @param responseObj 响应对象
* @param logger 日志对象
* @param 请求对象类型
* @param 响应对象类型
* @return 响应数据
*/
public static , Code extends Serializable> InterfaceResult upload(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Logger logger, Class codeClass) {
return sendExec(msgPre, url, requestObj, responseObj, null, logger, SendWay.UPLOAD, codeClass);
}
/**
* 发送 upload 请求,请求体的 toString() 应该是 json 字符串。例如: {name1:value1,name2:value2}
*
* @param msgPre 接口名称
* @param url 请求地址
* @param requestObj 请求对象
* @param responseObj 响应对象
* @param header 通用的请求属性
* @param logger 日志对象
* @param 请求对象类型
* @param 响应对象类型
* @return 响应数据
*/
public static , Code extends Serializable> InterfaceResult upload(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger, Class codeClass) {
return sendExec(msgPre, url, requestObj, responseObj, header, logger, SendWay.UPLOAD, codeClass);
}
/**
* 发送 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 , Code extends Serializable> InterfaceResult sendExec(String msgPre, String url, RequestObj requestObj, ResponseObj responseObj, Map header, Logger logger, SendWay sendWay, Class codeClass) {
InterfaceResult result = new InterfaceResult<>();
try {
HttpResult httpResult = null;
{ // 执行 HTTP 请求
String requestObjBody = requestObj.getBody();
logger.debug(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 请求方式不支持");
}
}
if (httpResult.isSuccess()) { // 请求 HTTP 成功
ResData resData = httpResult.getData();
logger.debug(msgPre + "接口响应头:{}", resData.getHeaders());
logger.debug(msgPre + "接口响应体:{}", resData.getBody());
responseObj.setBody(resData.getBody()); // 设置响应体的同时, 会将响应的 错误码和错误内容 解析到 responseObj 中, 并根据默认的成功码 判断是否执行成功
responseObj.setResTime(DateUtil.nowLong()); // 设置响应时间
responseObj.setConsumeTime(responseObj.getResTime() - requestObj.getReqTime()); // 计算耗时
if (responseObj.isSuccess()) { // 接口响应成功数据
result.success(msgPre + responseObj.getErrMsg(), responseObj);
logger.debug(msgPre + "接口成功:{}", result.toJSONString());
} else { // 接口响应失败数据
result.fail(ObjectUtil.cast(responseObj.getErrCode()), msgPre + responseObj.getErrMsg(), responseObj);
logger.warn(msgPre + "接口失败:{}", result.toJSONString());
}
result.setConsumeTime(responseObj.getConsumeTime());
logger.debug(msgPre + "接口完成:{}", result.toJSONString());
} else { // 请求 HTTP 失败
responseObj.setErrCode(ObjectUtil.cast(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.warn(msgPre + "请求 HTTP 失败:{}", result.toJSONString());
}
} catch (Exception e) { // 执行异常
responseObj.setErrCode(ObjectUtil.cast(500));
responseObj.setErrMsg(e.getMessage());
responseObj.setResTime(DateUtil.nowLong()); // 设置响应时间
responseObj.setConsumeTime(responseObj.getResTime() - requestObj.getReqTime()); // 计算耗时
result.error(msgPre + "请求 HTTP 异常:" + e.getMessage(), responseObj);
result.setConsumeTime(responseObj.getConsumeTime());
logger.error(result.getMsg(), e);
}
return result;
}
}