前言:

为什么推荐在RPC的接口中入参和出参都不要使用枚举。最近,我们的线上环境出现了一个问题,线上代码在执行过程中抛出了一个IllegalArgumentException,分析堆栈后,发现最根本的的异常是以下内容:


java.lang.IllegalArgumentException: No enum constant com.a.b.f.m.a.c.AType.P_M

大概就是以上的内容,看起来还是很简单的,提示的错误信息就是在AType这个枚举类中没有找到P_M这个枚举项。于是经过排查,我们发现,在线上开始有这个异常之前,该应用依赖的一个下游系统有发布,而发布过程中是一个API包发生了变化,主要变化内容是在一个RPC接口的Response返回值类中的一个枚举参数AType中增加了P_M这个枚举项。但是下游系统发布时,并未通知到我们负责的这个系统进行升级,所以就报错了。我们来分析下为什么会发生这样的情况。

一、问题重现

首先,下游系统A提供了一个二方库的某一个接口的返回值中有一个参数类型是枚举类型。

一方库指的是本项目中的依赖

二方库指的是公司内部其他项目提供的依赖

三方库指的是其他组织、公司等来自第三方的依赖

public interface AFacadeService {
    public AResponse doSth(ARequest aRequest);}public Class AResponse{
    private Boolean success;
  

Java基础学习总结(168)——为什么推荐在RPC的接口中入参和出参都不要使用枚举相关推荐

  1. Java基础学习系列--(二)【抽象类,接口、代码块、final、单例、枚举】

    第一章 抽象类 1.1 概述 1.1.1 抽象类引入 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同.那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对 ...

  2. Java基础学习总结(180)——如何保证API接口安全

    一.摘要 在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接.微信支付对接.高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司ap ...

  3. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

  4. Java基础学习——第十四章 网络编程

    Java基础学习--第十四章 网络编程 一.网络编程概述 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信 ...

  5. java基础学习-4

    Java基础学习-4 static 注意事项 重新认识main方法 继承 小练习 子类到底能继承父类中的哪些内容(第126集)*** 继承过程中成员变量和成员方法的访问特点 小练习 小总结 构造方法的 ...

  6. java基础学习_IO流03_字符流、IO流小结、案例_day21总结

    java基础学习_IO流03_字符流.IO流小结.案例_day21总结 ================================================================ ...

  7. JAVA基础学习精简心得笔记整理

    JAVA基础学习精简心得笔记整理 配置java环境变量 Java的运行过程  基本数据类型 引用数据类型 逻辑运算符 数组 方法重载 封装 继承 多态 多态的作用 单例设计模式 接口interface ...

  8. java基础学习整理(一)

    java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...

  9. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结

    Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...

最新文章

  1. gRPC 的 4 种基础通信模式
  2. centos7重新加载服务的命令_阿粉手把手教你在 CentOS7 下搭建 Jenkins
  3. 成功解决⑧NVIDIA安装程序无法继续 此NVIDL驱动程序与此Windows版本不兼容。 此图形驱动程序无法找到兼吝的图形硬件。
  4. 106. 动态中位数【经典 / 对顶堆】
  5. C语言实现上三角蛇形矩阵不用数组,C/C++编程笔记:C++ 嵌套循环,含循环打印及蛇形矩阵实例...
  6. shell脚本执行方式,更方便更快捷。
  7. inputstreamreader未关闭会导致oom_ThreadLocal 一定会导致内存泄露?
  8. BootStrap笔记-导航
  9. 谁扰乱了中国的工资秩序?
  10. Beanstalkd消息队列的安装与使用
  11. vue -- router路由跳转错误 , NavigationDuplicated
  12. .chm文件如何打开
  13. java打砖块源码_java打砖块
  14. windows进程详解
  15. python和机器人_python 机器人
  16. 使用FileZilla,FTP登录出现错误:FileZilla状态: 不安全的服务器,不支持 FTP over TLS
  17. 计算机显示器刷新率怎么调,电脑显示器刷新率怎么调
  18. 《0~3岁孩子的 正面管教》——备忘
  19. 关于启动 vue 项目出现 98% after emitting CopyPlugin 的解决方法!
  20. proftpd mysql_Proftpd mysql认证配置文档

热门文章

  1. C++---------之--------【虚析构函数】
  2. 硬盘安装linux_Surface-Laptop3 安装Archlinux折腾小记
  3. python元类是什么_谈谈Python中元类Metaclass(一):什么是元类
  4. php网站渗透实战_【案例分析】记一次综合靶场实战渗透
  5. oracle standby同步,PRIMARY Standby不能同步问题
  6. kmeans及模型评估指标_聚类分析的过程和两个常用的聚类算法
  7. mysql dbuild_config_技术分享 | MySQL Test 初探
  8. .net 手机问卷 源码_当.Net成为大厂门槛代码小白该何去何从?
  9. pdb断点命令_Python使用pdb更优雅的调试代码
  10. 1971旗舰cpu intel_AMD依然yes!官宣锐龙5000系列CPU,单核性能首次超越英特尔,苏妈:最好的游戏CPU!...