Commit ec39ef8e by 袁伟铭

1.0.0

parent 80e3bda4
...@@ -25,7 +25,9 @@ public enum ApiCodeEnum { ...@@ -25,7 +25,9 @@ public enum ApiCodeEnum {
CHECK_SIGN_VALID_ERROR("108", "签名校验失败"), CHECK_SIGN_VALID_ERROR("108", "签名校验失败"),
BUSINESS_ERROR("400", "业务处理异常"), BUSINESS_ERROR("400", "业务处理失败"),
SERVER_ERROR("500", "服务器繁忙"),
; ;
......
package com.zq.api.controller; package com.zq.api.controller;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil; import cn.hutool.extra.servlet.ServletUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.zq.api.config.ApiTokenUtils;
import com.zq.api.constant.ApiCodeEnum; import com.zq.api.constant.ApiCodeEnum;
import com.zq.api.form.ApiForm; import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp; import com.zq.api.form.ApiResp;
import com.zq.api.service.ApiService; import com.zq.api.service.ApiService;
import com.zq.api.utils.ApiUtils; 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.ApiTokenVo;
import com.zq.common.vo.ResultVo;
import feign.FeignException;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -39,11 +43,10 @@ public class ApiController { ...@@ -39,11 +43,10 @@ public class ApiController {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
ApiForm form = ServletUtil.toBean(request, ApiForm.class, true); ApiForm form = ServletUtil.toBean(request, ApiForm.class, true);
ApiResp resp = new ApiResp(form);
// 不处理Request Method:OPTIONS的请求 // 不处理Request Method:OPTIONS的请求
if (request.getMethod().equals("OPTIONS")) { if (request.getMethod().equals("OPTIONS")) {
return resp; return ApiUtils.getSuccessResp(form);
} }
String method = form.getMethod(); String method = form.getMethod();
...@@ -70,16 +73,31 @@ public class ApiController { ...@@ -70,16 +73,31 @@ public class ApiController {
form.setApiTokenVo(tokenVo); 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; resp = resp == null ? new ApiResp(form) : resp;
String logType = "INFO"; String logType = resp.isSuccess() ? "INFO" : "ERROR";
if (!resp.getCode().equals(ApiCodeEnum.SUCCESS.code())) {
logType = "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) { if (ApiUtils.DEBUG) {
...@@ -88,7 +106,7 @@ public class ApiController { ...@@ -88,7 +106,7 @@ public class ApiController {
+ "\n[time=" + (System.currentTimeMillis() - start) + "ms]"); + "\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; return resp;
} }
......
package com.zq.api.service; 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.constant.ApiCodeEnum;
import com.zq.api.dao.ApiLogDao; import com.zq.api.dao.ApiLogDao;
import com.zq.api.form.ApiForm; import com.zq.api.form.ApiForm;
...@@ -9,8 +9,6 @@ import com.zq.api.utils.ApiUtils; ...@@ -9,8 +9,6 @@ import com.zq.api.utils.ApiUtils;
import com.zq.api.utils.ReflectionUtils; import com.zq.api.utils.ReflectionUtils;
import com.zq.common.entity.ApiLog; import com.zq.common.entity.ApiLog;
import com.zq.common.utils.DateUtils; import com.zq.common.utils.DateUtils;
import com.zq.common.vo.ResultVo;
import feign.FeignException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -49,12 +47,12 @@ public class ApiService { ...@@ -49,12 +47,12 @@ public class ApiService {
return methodList; return methodList;
} }
public ApiResp action(ApiForm form) { public ApiResp action(ApiForm form) throws Exception {
if (!methodList.contains(form.getMethod())) { if (!methodList.contains(form.getMethod())) {
return ApiUtils.getMethodError(form); return ApiUtils.getMethodError(form);
} }
// 登陆验证标识 // 登陆验证标识
boolean validFlag = false; //ConfigCache.getValueToBoolean("API.LOGIN.VALID"); boolean validFlag = ConfigCache.getValueToBoolean("API.LOGIN.VALID");
IApiLogic apiLogic = getApiLogic(form); IApiLogic apiLogic = getApiLogic(form);
if (validFlag) { if (validFlag) {
// 先进行登陆验证。如果验证失败,直接返回错误 // 先进行登陆验证。如果验证失败,直接返回错误
...@@ -65,19 +63,10 @@ public class ApiService { ...@@ -65,19 +63,10 @@ public class ApiService {
} }
// 调用接口方法,利用反射更简洁 // 调用接口方法,利用反射更简洁
try { return (ApiResp) ReflectionUtils.invokeMethod(apiLogic, form.getMethod(), new Class<?>[]{ApiForm.class}, new Object[]{form});
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);
}
} }
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() apiLogDao.insert(ApiLog.builder()
.appId(form.getAppId()) .appId(form.getAppId())
.userId(form.getUserId()) .userId(form.getUserId())
...@@ -86,6 +75,7 @@ public class ApiService { ...@@ -86,6 +75,7 @@ public class ApiService {
.bizContent(form.getBizContent()) .bizContent(form.getBizContent())
.logType(logType) .logType(logType)
.respMsg(respMsg) .respMsg(respMsg)
.errorInfo(errorInfo)
.timeCost(String.valueOf(timeCost)) .timeCost(String.valueOf(timeCost))
.createTime(DateUtils.now()) .createTime(DateUtils.now())
.build()); .build());
......
...@@ -74,6 +74,12 @@ public class ApiLog { ...@@ -74,6 +74,12 @@ public class ApiLog {
private String respMsg; private String respMsg;
/** /**
* 错误信息
*/
@ApiModelProperty("错误信息")
private String errorInfo;
/**
* 耗时-毫秒 * 耗时-毫秒
*/ */
@ApiModelProperty("耗时-毫秒") @ApiModelProperty("耗时-毫秒")
...@@ -85,4 +91,4 @@ public class ApiLog { ...@@ -85,4 +91,4 @@ public class ApiLog {
@ApiModelProperty("创建时间") @ApiModelProperty("创建时间")
private Date createTime; 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