当前位置: 首页 > news >正文

Feign框架中一处编码不合理导致的异常

简述一下背景。线上的应用A导出文件失败,但是对应的任务状态没有设置。经过代码的梳理,大致流程为:

  1. 创建导出任务
  2. 执行异步任务:
    2.1 文件下载、打包
    2.2 调用应用B的Feign接口上传文件
  3. 更新异步任务状态

在执行2.2这一步时,调用Feign接口内部抛了一个异常:
image

对应代码是:
image

照理说,这样导出任务会置为失败:
image

但是,由于EncodeException的message是null,导致substring()方法调用时抛了个NPE,设置任务状态的代码不会执行。

Exception的message,是允许为null的,但是在Feign的EncodeException代码里却是这样:

public class EncodeException extends FeignException {private static final long serialVersionUID = 1L;/*** @param message the reason for the failure.*/public EncodeException(String message) {super(checkNotNull(message, "message"));}/*** @param message possibly null reason for the failure.* @param cause   the cause of the error.*/public EncodeException(String message, Throwable cause) {super(message, checkNotNull(cause, "cause"));}
}

所以这里就很奇怪,在第一个构造器里,message不能为null,但在第二个构造器里,又允许为null。那么对于依赖EncodeException中message内容的代码,仍然要对null做处理,既然如此,为什么第一个构造器允许message为空又何妨?

另一种保持行为一致的方式,可以给第二个构造器加一个默认的message,仅当传入值非空时才使用传入值。

对于这个问题,由于我对Feign整体的了解有限,没有提Pull request而是提了一个issue:Why EncodeException's message is not nullable in 1st constructor but nullable in 2nd constructor?。文中应用A使用io.github.openfeign的是9.5.1,而对于github上主干分支,仍然有类似问题。

http://www.vanclimg.com/news/2945.html

相关文章:

  • nginx 文件服务器
  • 阿里通义发布 Qwen3-30B-A3B-Instruct-2507 模型
  • 基于深度学习YOLO框架的城市道路损伤检测与评估项目系统【附完整源码+数据集】
  • GBase8a获取某个服务的堆栈信息
  • PostgreSQL 分区最佳实践
  • sqlacodegen使用方法
  • [Flink/Java] Flink Job 运行问题 FAQ
  • CF 1093 Div
  • Linux Cgroups(Control Groups)限制不同用户的CPU和内存资源
  • 动态代码记录
  • 怎么查看系统的上下⽂切换情况 - BinBin
  • 7.30
  • C语言基础-练习:猜数字
  • 题解:CF1270G Subset with Zero Sum
  • BARRA CNE6
  • IMA-Appraisal 简单介绍
  • RoD-TAL:罗马尼亚驾照考试问答基准
  • charles破解
  • MySQL面试题及详细答案 155道(001-020) - 指南
  • @NotBlank、@NotEmpty、@NotNull
  • pid查询树形结构
  • C语言基础-随机数
  • 教育 AI 大事件!OpenAI 深夜甩出 ChatGPT Study,免费当你 24 小时私人家教
  • C语言基础-循环语句(循环结构)
  • 题解:AT_agc066_c [AGC066C] Delete AAB or BAA
  • CF2120D Matrix game 题解
  • DP - 数据结构优化
  • P1163 银行贷款-二分
  • PyTorch基础
  • Gitee Wiki重塑关键领域软件开发的知识管理范式