踩坑篇

作者: 寒叶xly | 来源:发表于2018-09-24 12:00 被阅读0次

一周的工作结束,详述一些实际中遇到的一些坑。

1、Map key 值为 Long 类型隐患

    在使用Map的时候,一般都是使用String作为Key值,因为String是不可变的,但是以前在实际的编码场景中也没有遇到过其他的一些对象作为key值,然后第一次遇到,便产生一个Bug。

1-伪代码

场景:根据商品id去上游查询商品详情,但是上游返回的数据格式是Json字符串。

原因:从截图中可以看书,上游返回了id = 2234762 的商品详情,但是解析的时候之后出现了红框 1 中结果,为null,原因可以从红框 2 查找,恍然大悟,上游返回的 id 转化之后变成了 Integer类型,但是调用方是拿Long类型去匹配,就出现该类问题。

解决办法: 使用jackJson解析Json字符串,jackson可以配置解析属性,将所有的key值都转化为String类型。

2、拆箱导致NPE

2-拆箱NPE伪代码

场景:调用上游,获取上游返回结果,根据返回结果进行赋值。

原因:从伪代码截图中可以看出来,已经对上游的返回结果进行了判空处理,但是怎么还是出现了NPE呢?int id =user.getId(),在这一步出现了什么问题呢? 打开debug模式可以发现,当user对象中获取的id是包装类型Integer并且为null时,就会出现 int id = null;造成npe。

建议:1、调用端对于上游包装类型返回结果尽量判空。2、服务提供方在返回属性结果时尽量使用基本数据类型,减少调用端npe的可能性。

3、spring aop 使用误区

1、编译器使用 ajc,不管切面使用注解为 @Aspect + @Component 还是 @Aspect ,使用的都是原生的AspectJ静态字节码技术完成切面。

2、编译器使用 javac,如果注解单独使用 @Aspect,切面无效。如果是 @Aspect + @Component,那么使用的是JDK的动态字节码技术或者是cglib的动态字节码技术完成切面。

相关文章

  • 算法踩坑6-二叉搜索树排序

    背景 接上面五篇文章算法踩坑-快速排序 算法踩坑2-插入排序 算法踩坑3-堆排序 算法踩坑4-冒泡排序 ...

  • 算法踩坑5-归并排序

    背景 接上面四篇文章算法踩坑-快速排序 算法踩坑2-插入排序 算法踩坑3-堆排序 算法踩坑4-冒泡排序 来...

  • 踩坑篇

    在jdk1.9中使用lombok报错如下: Warning:(5,8)java: lombok.javac.apt...

  • 踩坑篇

    一周的工作结束,详述一些实际中遇到的一些坑。 1、Map key 值为 Long 类型隐患 在使用Map的时候...

  • 踩坑篇

    东京的行程没有做,Winter说Idera san会带我们走市场,不用做行程是指自己安排的要做行程 地铁和JR线路...

  • 算法踩坑4-冒泡排序

    背景 接上面三篇文章算法踩坑-快速排序 算法踩坑2-插入排序 算法踩坑3-堆排序 来继续聊聊最近我写的一些算...

  • Vue踩坑实录(二)

    在上一篇中说了一下踩过的前三个坑,剩下的坑就在这篇中全部搞定吧。Vue踩坑实录(一) Vue-cli .js?.V...

  • JavaScrip-StepPitGuide《JavaScrip

    《JavaScript踩坑指南》JavaScrip-StepPitGuide? 《JavaScript踩坑指南》 ...

  • [Kotlin/Native] 你想知道的都在这里了

    再一次过来帮大家踩坑了,Kotlin/Native 虽然很方便,但是坑依然不少,通过这一篇文章踩完吧,希望以后不要...

  • D1094:踩坑的价值最大化

    是人就会踩坑,不踩坑理论上就不属于人类,踩坑是人之常情,能回头站在坑边反思,才是对踩过的的坑价值最大化的体现,要不...

网友评论

      本文标题:踩坑篇

      本文链接:https://www.haomeiwen.com/subject/ycmcoftx.html