openfeign 传递异常信息

1 处理非200 异常

pom

        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-jackson</artifactId>
        </dependency>

code

public class FeignException implements ErrorDecoder {
    private final ErrorDecoder defaultErrorDecoder = new Default();

    @Override
    public Exception decode(String methodKey, Response response) {
        JacksonDecoder decoder = new JacksonDecoder();
        Result<?> apiResponse;
        try {
            apiResponse = (Result<?>) decoder.decode(response, Result.class);
        } catch (Exception exception) {
            log.error("FeignException decode exception", exception);
            throw new AppException(ResultCodeEnum.FEIGN_EXCEPTION);
        }
        if (apiResponse != null) {
            return new AppException(apiResponse.getCode(), apiResponse.getMessage());
        } else {
            return defaultErrorDecoder.decode(methodKey, response);
        }
    }
}

处理200 自定义异常


@Aspect
@Component
@Slf4j
public class MicroServiceExceptionAop {

    /**
     * 自定义切面切点,拦截feign目录下的所有方法
     */
    @Pointcut("execution(* com.huawei.mideas.requirement.feign.*.*(..))")
    public void servicePointcut() {

    }

    /**
     * 切点方法成功执行返回后运行
     *
     * @param joinPoint 切面信息
     * @param returnValue 返回结果
     */
    @AfterReturning(value = "servicePointcut()", returning="returnValue")
    public void doAfterReturning(JoinPoint joinPoint, Object returnValue) {
        Result<?> backObject;
        try {
            backObject = (Result<?>) returnValue;
        } catch (Exception e) {
            log.error("MicroServiceExceptionAop doAfterReturning e", e);
            throw new AppException(ResultCodeEnum.MICRO_SERVICE_EXCEPTION_AOP_EXCEPTION);
        }
        if (backObject.getCode() != 200) {
            throw new AppException(backObject.getCode(), backObject.getMessage());
        }
    }
}
posted @ 2023-08-07 09:30  linzm14  阅读(105)  评论(0编辑  收藏  举报