为什么阿里巴巴RPC接口不允许使用枚举类型?

本文分析了线上环境中由于RPC接口返回枚举类型导致的异常问题,解释了原理和背后的原因。阿里巴巴Java开发手册规定,二方库返回值不应使用枚举,以防版本升级带来的兼容性问题。文中建议使用字符串代替枚举以增强接口的健壮性和降低升级风险。
摘要由CSDN通过智能技术生成

最近,我们的线上环境出现了一个问题,线上代码在执行过程中抛出了一个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;

    private AType aType;

}

public enum AType{

    P_T,

    A_B

}

然后B系统依赖了这个二方库ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值