场景复现
(ps:当前采用的hutool版本为5.7.16)
此时projectDO在数据库查询不到,为null值,但当使用去判断是否为空时,无法判断成功。所以就很好奇在执行BeanUtil.copyProperties方法时做了哪些操作,导致判断失效。
ProjectDO projectDO = projectMapperService.getById(projectId);
ProjectEntity projectEntity = BeanUtil.copyProperties(projectDO, ProjectEntity.class);
if (Objects.isNull(projectEntity)) {
return null;
}
问题排查
在阅读源码的过程中发现
进入方法的开始阶段便调用构造方法生成一个空属性的对象,所以当传参为null时,最终结果也会返回一个属性全为null的空对象。所以在使用Objects去判断是否为null时失效。
解决措施
一共查询三个hutool版本的包,对待传参为null,分别有三种不同情况的处理:
5.7.16 会返回包装成属性全为null的空对象
5.8.0.M2 会直接抛出空指针异常
5.8.29 正常返回null