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; 
 | 
    } 
 | 
} 
 |