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());
}
}
}
蓝天和白云是标配。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端