ExceptionAspect
package com.mozhu.common.aspect.exception;
import com.mozhu.common.bean.JsonResult;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* 切面
* 处理异常及日志
*/
@Aspect
@Component
public class ExceptionAspect {
public static Logger logger = LoggerFactory.getLogger(ExceptionAspect.class);
private final String loginUrl = "";
/**
* 切点,切所有业务层及接口
* execution(* com.mozhu.bssh..*.*Service.* (..)) or execution(* com.mozhu.bssh..*.*Controller.* (..))
*/
private final static String CUT_POINT = "execution(* com.mozhu.bst..*.*Controller.* (..)) or execution(* com.mozhu.bst.system.service.impl.SysUserServiceImpl.* (..))";
@Around(value = CUT_POINT)
public Object exceptionAspect(ProceedingJoinPoint target) {
try {
Object obj = target.proceed();
return obj;
} catch (Throwable e) {
// 业务异常
if (e instanceof BusinessException) {
logger.warn(e.getMessage());
// 非登录异常,传警告异常到前端
return new JsonResult<Object>(JsonResult.WARNING, e.getMessage());
} else {
// 未知异常,传错误异常到前端
GlobalException globalException = new GlobalException(e);
logger.error("ExceptionId:{}", globalException.getExceptionId());
e.printStackTrace();
return new JsonResult<Object>(JsonResult.ERROR, "程序执行失败。ExceptionId:" + globalException.getExceptionId());
}
}
}
/**
* 获取异常行数
*
* @param target
* @param e
* @return
*/
private Integer getErrorLineNumber(ProceedingJoinPoint target, Throwable e) {
Class<?> cls = target.getTarget().getClass();
String clsName = cls.getName();
String methodName = target.getSignature().getName();
int n = 0;
for (int i = 0; i < e.getStackTrace().length; i++) {
StackTraceElement stackTraceElement = e.getStackTrace()[i];
if (clsName.equals(stackTraceElement.getClassName()) && methodName.equals(stackTraceElement.getMethodName())) {
n = e.getStackTrace()[i].getLineNumber();
}
}
return n;
}
public class RequestMessage {
private String clsName;
private String methodName;
private String requestName;
public String getClsName() {
return clsName;
}
public void setClsName(String clsName) {
this.clsName = clsName;
}
public String getMethodName() {
return methodName;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
public String getRequestName() {
return requestName;
}
public void setRequestName(String requestName) {
this.requestName = requestName;
}
}
}