zoukankan      html  css  js  c++  java
  • 零售退款导出列表页下载出错

    线上报零售退款导出报表下载出错。

    第一次,线上报紧急问题,我心中竟然波澜不惊。也许是事先我已经足够审慎地审查过每一行代码的风险(改动也比较大,但绝大部分都是新增的),尽可能避免有风险的做法,并回归了所有必要的导出场景(只差一点,我不记得为什么正好就那个场景没有回归到或者没有发现问题)。甚至测试同学回滚后恢复正常,我依然固执认为不是我代码引起的问题。

    但最终还是栽在一个极不起眼的小细节上。事出必有因。看下面的代码,你能猜到什么原因吗 ?

    因为退款导出还未接入云存储,newUrlMap 为空,List newSubUrls = StreamUtil.map(subUrls, url -> newUrlMap.get(url)); 会将 null 值填入 newSubUrls ,join 之后,newUrl 就会变成 "null" 字符串,导致退款下载 url 被设置为 null,下载就出错了。

    启示:

    1. 不要惧怕故障。要避免故障,唯一的方法是足够审慎地审查每一行代码可能的风险,做好足够的测试回归。没有人能避免出错,但有章法的做事可以将影响面降低到最小;恐慌是完全没有必要也没什么用处的;

    2. 细节上最易出错。往往改动很大,主要部分因为非常小心不会出错,一些不起眼的地方却会遭致失败。不可不鉴之。

    3. 使用 stream.map 时,要防御 null 值写进最终的值集合。写成这样: List<String> newSubUrls = subUrls.stream().map(url -> newUrlMap.get(url)).filter(Objects::nonNull).collect(Collectors.toList());

  • 相关阅读:
    《孙子兵法》(前六篇)读书笔记
    写代码的指导思想:如何写出易测、清晰、健壮的牢固代码
    如何从业务代码中抽离出可复用的微组件
    碎碎念集萃二八
    订单同步工程标准化改造事记
    代码的味道
    批量导出51电子发票的pdf文件
    LODOP具体的分类的简短问答
    lodop打印透明图简短问答
    LODOP打印公章的白色透明2
  • 原文地址:https://www.cnblogs.com/lovesqcc/p/13307844.html
Copyright © 2011-2022 走看看