Lombok注解引发的空指针问题分析

💡 原文中文,约4700字,阅读约需12分钟。
📝

内容提要

在一次上线后,日志中出现空指针的报错,但是报错代码位置以及相应工具类未进行过修改。问题出在工具类的copyProperties方法,该方法使用了@Accessors(chain = true)注解的类在获取属性描述PropertyDescriptor时会出现空指针问题。解决办法是删除该注解或替换对象拷贝的工具类。

🎯

关键要点

  • 上线后日志出现空指针报错,报错代码位置未修改。
  • 问题出在工具类的copyProperties方法,使用@Accessors(chain = true)注解的类导致空指针问题。
  • Lombok的@Accessors注解使得set方法返回this对象,影响Introspector对写入方法的判断。
  • BeanCopier依赖Introspector的writeMethod,导致无法获取属性的写入方法,从而出现空指针。
  • 解决办法包括删除@Accessors注解或替换对象拷贝工具类。
  • 建议使用MapStruct配合Lombok,生成更安全的get/set方法。
  • 依赖JDK Introspector的工具类在使用@Accessors时需谨慎,可能导致对象拷贝问题。
➡️

继续阅读