如果用left join 虽然看着这里查出来的结果是null,
但其实,它是有结果的,比如,你加一行te.id,查出来其实是有一条记录的。
注:这是因为Left Join会返回左表中的所有记录,在这里,左表即 t_employee,它里面id为1,是有数据的。
所以图一的数据,当你往后台传的时候,虽然此时“userMenus”为【null】,但是它的size为1。
于是,当你用下面这行代码判断时,它返回值比是false(即不为empty),因此会继续往下执行。
if(CollectionUtils.isEmpty(userMenus)){
return new ResponseData<>().ok("无权限");
}
当数据往下执行,在调用stream流的时候,就会报空指针异常。
既然问题出现在SQL语句。
怎么解决呢?
把sql语句里的left join 改为 inner join 。
Left Join和Inner Join的主要区别在于Left Join会返回左表中的所有记录,而Inner Join只返回符合连接条件的记录。
这样查出来就是真的空了。
把mapper.xml文件里的sql语句也改掉,代码就运行正常了,看左下角,查出来的是【】,
然后直接返回“无权限”。不执行下面的代码,也就不会报空指针异常了。
if(CollectionUtils.isEmpty(userMenus)){
return new ResponseData<>().ok("无权限");
}
你学会了吗?