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 @   linzm14  阅读(162)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示