RPC StringBuilder NPE
异常场景
- 技术支持反馈:生产环境活动场商品数据检索功能异常,提示系统异常;但数据加载正常
异常分析
- 查询日志:NPE异常,系统没有对NPE的提示语进行优化,直接抛出Exception的异常提示语——系统异常
- 代码分析:此处的功能是通过RPC接口,获取接口返回的属性A与B,两者均为字符串,且对接时明确告知一定不为空,通过StringBuilder 进行拼接两个字符串
- 问题分析:开发人员按照对接接口的开发的提示没有做任何判空处理;直接将A作为StringBuilder的构造方法入参;属性A在接口提供方刷新数据后某一条数据被错误的设置为空了
- 异常模拟1
异常反思
- StringBuilder的构造方法的入参都可以归纳为初始化char[]数组长度,都需要判空
- RPC接口返回值,如果为字符串建议不要直接赋值为NULL
- RPC接口使用时对所有参数都要做非空校验处理,不可盲目相信接口提供方的说法;因为存在业务变更、数据更新、人为操作异常等等情况