Commit ec39ef8e by 袁伟铭

1.0.0

parent 80e3bda4
......@@ -25,7 +25,9 @@ public enum ApiCodeEnum {
CHECK_SIGN_VALID_ERROR("108", "签名校验失败"),
BUSINESS_ERROR("400", "业务处理异常"),
BUSINESS_ERROR("400", "业务处理失败"),
SERVER_ERROR("500", "服务器繁忙"),
;
......
package com.zq.api.controller;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import com.alibaba.fastjson.JSON;
import com.zq.api.config.ApiTokenUtils;
import com.zq.api.constant.ApiCodeEnum;
import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp;
import com.zq.api.service.ApiService;
import com.zq.api.utils.ApiUtils;
import com.zq.common.config.security.ApiTokenUtils;
import com.zq.common.utils.ThrowableUtil;
import com.zq.common.vo.ApiTokenVo;
import com.zq.common.vo.ResultVo;
import feign.FeignException;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -39,11 +43,10 @@ public class ApiController {
long start = System.currentTimeMillis();
ApiForm form = ServletUtil.toBean(request, ApiForm.class, true);
ApiResp resp = new ApiResp(form);
// 不处理Request Method:OPTIONS的请求
if (request.getMethod().equals("OPTIONS")) {
return resp;
return ApiUtils.getSuccessResp(form);
}
String method = form.getMethod();
......@@ -70,16 +73,31 @@ public class ApiController {
form.setApiTokenVo(tokenVo);
}
String errorInfo = "";
// 调用接口方法
resp = apiService.action(form);
ApiResp resp;
try {
resp = apiService.action(form);
} catch (Exception e) {
errorInfo = ThrowableUtil.getStackTrace(e);
e.printStackTrace();
// 判断指定异常是否来自或者包含指定异常
if (ExceptionUtil.isFromOrSuppressedThrowable(e, FeignException.Unauthorized.class)) {
resp = ApiUtils.toApiResp(form, ResultVo.fail(401, "Unauthorized"));
} else {
resp = ApiUtils.getMethodHandlerError(form);
}
}
// 没有数据输出空
resp = resp == null ? new ApiResp(form) : resp;
String logType = "INFO";
if (!resp.getCode().equals(ApiCodeEnum.SUCCESS.code())) {
logType = "ERROR";
String logType = resp.isSuccess() ? "INFO" : "ERROR";
// 如果是500错误, 服务会返回错误的堆栈信息
if (resp.getCode().equals(ApiCodeEnum.SERVER_ERROR.code())) {
errorInfo = resp.getMsg();
resp.setMsg(ApiCodeEnum.SERVER_ERROR.msg());
}
String respMsg = resp.getMsg();
// 调试日志
if (ApiUtils.DEBUG) {
......@@ -88,7 +106,7 @@ public class ApiController {
+ "\n[time=" + (System.currentTimeMillis() - start) + "ms]");
}
apiService.addLog(form, logType, respMsg, System.currentTimeMillis() - start);
apiService.addLog(form, logType, resp.getMsg(), errorInfo, System.currentTimeMillis() - start);
return resp;
}
......
package com.zq.api.service;
import cn.hutool.core.exceptions.ExceptionUtil;
import com.zq.api.config.ConfigCache;
import com.zq.api.constant.ApiCodeEnum;
import com.zq.api.dao.ApiLogDao;
import com.zq.api.form.ApiForm;
......@@ -9,8 +9,6 @@ import com.zq.api.utils.ApiUtils;
import com.zq.api.utils.ReflectionUtils;
import com.zq.common.entity.ApiLog;
import com.zq.common.utils.DateUtils;
import com.zq.common.vo.ResultVo;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
......@@ -49,12 +47,12 @@ public class ApiService {
return methodList;
}
public ApiResp action(ApiForm form) {
public ApiResp action(ApiForm form) throws Exception {
if (!methodList.contains(form.getMethod())) {
return ApiUtils.getMethodError(form);
}
// 登陆验证标识
boolean validFlag = false; //ConfigCache.getValueToBoolean("API.LOGIN.VALID");
boolean validFlag = ConfigCache.getValueToBoolean("API.LOGIN.VALID");
IApiLogic apiLogic = getApiLogic(form);
if (validFlag) {
// 先进行登陆验证。如果验证失败,直接返回错误
......@@ -65,19 +63,10 @@ public class ApiService {
}
// 调用接口方法,利用反射更简洁
try {
return (ApiResp) ReflectionUtils.invokeMethod(apiLogic, form.getMethod(), new Class<?>[]{ApiForm.class}, new Object[]{form});
} catch (Exception e) {
e.printStackTrace();
// 判断指定异常是否来自或者包含指定异常
if (ExceptionUtil.isFromOrSuppressedThrowable(e, FeignException.Unauthorized.class)) {
return ApiUtils.toApiResp(form, ResultVo.fail(401, "Unauthorized"));
}
return ApiUtils.getMethodHandlerError(form);
}
return (ApiResp) ReflectionUtils.invokeMethod(apiLogic, form.getMethod(), new Class<?>[]{ApiForm.class}, new Object[]{form});
}
public void addLog(ApiForm form, String logType, String respMsg, Long timeCost) {
public void addLog(ApiForm form, String logType, String respMsg, String errorInfo, Long timeCost) {
apiLogDao.insert(ApiLog.builder()
.appId(form.getAppId())
.userId(form.getUserId())
......@@ -86,6 +75,7 @@ public class ApiService {
.bizContent(form.getBizContent())
.logType(logType)
.respMsg(respMsg)
.errorInfo(errorInfo)
.timeCost(String.valueOf(timeCost))
.createTime(DateUtils.now())
.build());
......
......@@ -74,6 +74,12 @@ public class ApiLog {
private String respMsg;
/**
* 错误信息
*/
@ApiModelProperty("错误信息")
private String errorInfo;
/**
* 耗时-毫秒
*/
@ApiModelProperty("耗时-毫秒")
......@@ -85,4 +91,4 @@ public class ApiLog {
@ApiModelProperty("创建时间")
private Date createTime;
}
\ No newline at end of file
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment