cn.net.wanmo.common.restful.body.Res Maven / Gradle / Ivy
package cn.net.wanmo.common.restful.body;
import cn.net.wanmo.common.http.util.ResUtil;
import cn.net.wanmo.common.util.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 响应体
*/
@Deprecated
public abstract class Res implements Serializable {
private Logger logger = LoggerFactory.getLogger(Res.class);
/**
* 错误代码
*/
protected Code errCode;
/**
* 错误内容
*/
protected String errMsg;
/**
* 是否需要解密
*/
protected boolean decrypt;
/**
* 解密所需的参数
*/
protected Map decryptParams;
/**
* 待解构的响应体 类型(字符串/对象/数组)
*/
protected BodyType bodyType;
/**
* 待解构的响应体
*/
protected String body;
/**
* 响应头
*/
protected Map> headers;
/**
* 响应时间(单位:毫秒)
*/
protected Long resTime;
/**
* 耗时(单位:毫秒)
*/
protected Long consumeTime;
/**
* 默认响应体无需解密
*/
public Res() {
this.bodyType = BodyType.str;
this.decrypt = false;
this.resTime = DateUtil.nowLong();
}
public Res(Code errCode, String errMsg) {
this();
this.errCode = errCode;
this.errMsg = errMsg;
}
public Code getErrCode() {
return ObjectUtil.cast(errCode);
}
public void setErrCode(Code errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public Long getConsumeTime() {
return consumeTime;
}
public void setConsumeTime(Long consumeTime) {
this.consumeTime = consumeTime;
}
public boolean isDecrypt() {
return decrypt;
}
public void setDecrypt(boolean decrypt) {
this.decrypt = decrypt;
}
public Map getDecryptParams() {
return decryptParams;
}
public void setDecryptParams(Map decryptParams) {
this.decryptParams = decryptParams;
}
public BodyType getBodyType() {
return bodyType;
}
public void setBodyType(BodyType bodyType) {
this.bodyType = bodyType;
}
public String getBody() {
return body;
}
/**
* 设置响应体,并处理响应体
* 如果需要解密,则重写 decryptBody(body) 方法
*
* @param body
*/
public void setBody(String body) {
this.body = body;
if (StringUtil.isBlank(body)) {
return;
}
if (isDecrypt()) {
this.body = decryptBody(body);
}
parse(this.body);
}
public Map> getHeaders() {
return headers;
}
public void setHeaders(Map> headers) {
this.headers = headers;
}
public String getHeaderField(String key) {
if (MapUtil.isEmpty(headers)) {
return null;
}
List list = headers.get(key);
if (CollectionUtil.isEmpty(list)) {
return null;
}
return list.get(0);
}
public Long getResTime() {
return resTime;
}
public void setResTime(Long resTime) {
this.resTime = resTime;
}
/**
* 对响应数据进行解密
*
* @param body 完整的响应体
* @return 解密后的数据
*/
public String decryptBody(String body) {
this.body = body;
return this.body;
}
/**
* 从接口响应数据中解析
*
* @param resBody 接口响应的数据
* @return 解析后的响应
*/
public Res parse(String resBody) {
switch (bodyType) {
case str:
this.errCode = defaultErrCode(); // 响应的字符串,没有 错误码和错误描述,默认赋值成功码
parseStr(resBody);
break;
case obj:
parseCodeMsg(resBody); // 优先解析出错误码和错误描述
parseObj(resBody);
parse(JSON.parseObject(resBody));
// todo this.body = null; // 解析后 将响应体转为 JSONObject 置为 null
break;
case arr:
parseCodeMsg(resBody); // 优先解析出错误码和错误描述
parseArr(resBody);
parse(JSON.parseArray(resBody));
// todo this.body = null; // 解析后 将响应体转为 JSONObject 置为 null
break;
default:
logger.warn("未知的响应体类型:{}", bodyType);
}
return this;
}
/**
* 从接口响应数据中解析 错误码和错误描述
*
* @param resBody 接口响应的数据
* @return 解析后的响应
*/
public Res parseCodeMsg(String resBody) {
return this;
}
/**
* 从接口响应数据中解析
*
* @param resBody 接口响应的数据
* @return 解析后的响应
*/
public Res parseStr(String resBody) {
return this;
}
/**
* 从接口响应数据中解析
*
* @param object 接口响应的数据
* @return 解析后的响应
*/
@Deprecated
public Res parse(JSONObject object) {
return this;
}
/**
* 从接口响应数据中解析
*
* @param resBody 接口响应的数据
* @return 解析后的响应
*/
public Res parseObj(String resBody) {
return this;
}
/**
* 从接口响应数据中解析
*
* @param array 接口响应的数据
* @return 解析后的响应
*/
@Deprecated
public Res parse(JSONArray array) {
return this;
}
/**
* 从接口响应数据中解析
*
* @param resBody 接口响应的数据
* @return 解析后的响应
*/
public Res parseArr(String resBody) {
return this;
}
/**
* 获取默认的错误码
*
* @return 默认错误码
*/
public abstract Code defaultErrCode();
/**
* 响应是否成功
*/
public abstract boolean isSuccess();
public String toJSONString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return toJSONString();
}
}