package com.yanzuoguang.cloud.aop; import com.yanzuoguang.util.contants.ResultConstants; import com.yanzuoguang.util.exception.CodeException; import com.yanzuoguang.util.exception.ExceptionHelper; import com.yanzuoguang.util.helper.StringHelper; import com.yanzuoguang.util.vo.ResponseResult; 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.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * 接口切面,用于验证接口回调返回参数 * * @author 颜佐光 */ @Aspect @Component public class FeignAspect extends BaseRequestAspect { private static final String TAG = FeignAspect.class.getSimpleName(); @Value("${yzg.logFeign:false}") private boolean logFeign; /** * AOP的表达式 */ @Pointcut("execution(* *..feign..*Feign.*(..))") public void feignAspect() { } /** * 执行环形切面 * * @param joinPoint * @return */ @Around(value = "feignAspect()") public Object requestFeignAround(ProceedingJoinPoint joinPoint) throws Throwable { boolean clear = requestLogInit(); long start = requestLog(TAG, joinPoint); Object result = null; Exception ex = null; try { result = joinPoint.proceed(); // 假如是标准格式,则验证接口是否成功,不成功则抛出异常 if (result instanceof ResponseResult) { ResponseResult responseResult = (ResponseResult) result; if (!ResultConstants.SUCCESS.equals(responseResult.getCode())) { throw new CodeException(responseResult.getCode(), responseResult.getMessage(), responseResult.getTarget()); } } return result; } catch (CodeException e) { ex = e; throw e; } catch (Exception e) { result = ExceptionHelper.getError(e); ex = e; throw e; } finally { responseLog(logFeign, clear, TAG, StringHelper.EMPTY, joinPoint, start, result, ex); } } }