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