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