背景
项目是监控告警平台,会对多个系统进行监控,在某一系统存在下拉框子系统,通过选择不同子系统来查询不同的值班人员信息,告警情况等指标信息。每个子系统切换时都会正常出现告警指标,唯独有一个系统,点击后告警信息还有其他告警指标都有查询成功,唯独值班人员信息无法获取到,通过日志发现只提示个null,不得不吐槽下,上任写代码的同事,使用的e.getMessage(),使得详细异常没有完全输出,对于bug排查带来很多坑,又给更改了下日志输出…
分析
将日志明细打印输出后,发现了空指针问题所在:
排查思路:
1.报错信息是Comparator.comparing出现了空,且代码中是使用的getInteger,因而猜测是json串中,可能存在sort:0的情况。
2.有可能是代码没有考虑所有情况,sort允许为0,没有做到全面覆盖。
修复
方法一:将getInteger方法改为getString,然后再去使用Integer.ValueOf去获取对应的值。
方法二:使用Comparator.nullsLast(String::compareTo),来对空值进行处理。
实践
方法一:
使用getString的时候对于0还是会转成null,因此方法失效,不能使用。
方法二:调整为如下代码:
经验证,问题解决。