liurunyu
3 天以前 7f85ca5468e097f1749ab1ed812046cb8eb979b7
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/GlExceptionAspect.java
New file
@@ -0,0 +1,44 @@
package com.dy.common.webUtil;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
 * 全局异常处理,处理在Controller中抛出的异常,在Controller之前(如Fileter)发生的错误或异常由GlErrorCtrl处理
 * 此类是基于注解切面实现,
 * 另一种实现方式是基于拦截器和实现指定接口(GlExceptionHandler)
 */
//@Tag(name = "全局异常处理", description = "处理在Controller中抛出的异常,在Controller之前(如Fileter)发生的错误或异常由GlErrorCtrl处理")
//@Aspect
@Slf4j
//@Component
public class GlExceptionAspect {
    //@Pointcut("execution(* com.dy..*(..))")
    private void traceExceptionAspect() {
    }
    //@Around("traceExceptionAspect()")
    public Object around(ProceedingJoinPoint joinPoint) {
        String interfaceName = String.format("%s.%s", joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());
        Object result;
        try {
            result = joinPoint.proceed();
        } catch (Throwable ex) {
            if (ex instanceof GlException) {
                GlException e = (GlException) ex;
                result = BaseResponseUtils.buildFail(e.getMsg());
                log.error(String.format("调用接口%s异常,错误信息:%s", interfaceName, e.getMsg()), e);
            } else {
                result = BaseResponseUtils.buildFail("在Controller中或后产生异常:" + ex.getMessage());
                log.error(String.format("调用接口%s异常,错误信息:%s", interfaceName, ex.toString()), ex);
            }
        }
        return result;
    }
}