java.lang.NullPointerException: null错误原因及解决方法

抛出问题

今天在调试项目时报出一个错误java.lang.NullPointerException: null,sql日志及代码如下

XNIO-1 task-1] .p.c.s.c.PigxUserAuthenticationConverter : extractAuthentication===>>>authorities===>>>[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]
2021-05-25 16:08:39.071 DEBUG 8072 --- [  XNIO-1 task-1] c.x.c.mapper.CtnOrderFeeDao.selectCount  : ==>  Preparing: SELECT COUNT(1) FROM ctn_order_fee WHERE del_flag = '0' AND (status NOT IN (?) AND type = ?) AND tenant_id = 1 
2021-05-25 16:08:39.072 DEBUG 8072 --- [  XNIO-1 task-1] c.x.c.mapper.CtnOrderFeeDao.selectCount  : ==> Parameters: 0(Integer), 2(Integer)
2021-05-25 16:08:39.078 DEBUG 8072 --- [  XNIO-1 task-1] c.x.c.mapper.CtnOrderFeeDao.selectCount  : <==      Total: 1
2021-05-25 16:08:39.080 DEBUG 8072 --- [  XNIO-1 task-1] c.x.c.mapper.CtnOrderFeeDao.selectList   : ==>  Preparing: SELECT id, type, checkout_type, order_no, company_id, company, fee_type, fee_name, fee, pay_time, payed_fee, operator_id, operator, status, bill_sn, create_time, update_time, del_flag, create_by, invoice_no, rc_no, write_off_no, settlement_time, tenant_id FROM ctn_order_fee WHERE del_flag = '0' AND (status NOT IN (?) AND type = ?) AND tenant_id = 1 LIMIT 0, 20 
2021-05-25 16:08:39.081 DEBUG 8072 --- [  XNIO-1 task-1] c.x.c.mapper.CtnOrderFeeDao.selectList   : ==> Parameters: 0(Integer), 2(Integer)
2021-05-25 16:08:39.090 DEBUG 8072 --- [  XNIO-1 task-1] c.x.c.mapper.CtnOrderFeeDao.selectList   : <==      Total: 11
2021-05-25 16:08:39.093 DEBUG 8072 --- [  XNIO-1 task-1] c.x.c.mapper.CtnOrderInfoDao.selectList  : ==>  Preparing: SELECT no, lading_bill_no, type, create_time, packed_time FROM ctn_order_info WHERE del_flag = '0' AND (no IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)) AND tenant_id = 1 
2021-05-25 16:08:39.093 DEBUG 8072 --- [  XNIO-1 task-1] c.x.c.mapper.CtnOrderInfoDao.selectList  : ==> Parameters: 100082021030003(String), 100082021030003(String), 100082021030003(String), 100032021050136(String), 100032021050136(String), 100032021050165(String), 100032021050165(String), 100032021050165(String), 100032021050165(String), 100032021050165(String), 100032021050165(String)
2021-05-25 16:08:39.100 DEBUG 8072 --- [  XNIO-1 task-1] c.x.c.mapper.CtnOrderInfoDao.selectList  : <==      Total: 2
2021-05-25 16:08:39.101 ERROR 8072 --- [  XNIO-1 task-1] p.p.c.s.c.GlobalExceptionHandlerResolver : 全局异常信息 ex=null

在这里插入图片描述

分析原因

首先这个错误意思是空指针异常,说明报错位置缺少需要的数据,数据对不上,这个时候需要仔细查看日志报错内容,先看sql日志有没有问题,发现sql语句是自己想要的,没有问题,再看这次错误报的是在BillInfoController第236行在这里插入图片描述
找到这里,发现代码并没有明显异常在这里插入图片描述
这个时候就需要在报错位置Debug一下了在这里插入图片描述
仔细对比报错位置的数据,就发现问题了,两个合并关联的集合数目对不上

解决方法

查看数据库,发现数据库数据对不上,少了几条,导致合并数据出错,删除对不上的数据就可以了

总结

  1. 首先一定要仔细看日志报的什么错误,弄清楚错误类型

2. 其次也是最为重要的一步,一定要看sql日志中的sql语句有没有错误,是不是项目需要的sql语句,不是需要的就添加筛选条件或者删除该语句,sql语句没问题的话一般就debug一下看看数据流有没有问题,有问题自己去数据库看数据是不是对不上,一般就这两个原因。

  1. 像这种代码没有明显错误的空指针错误其实不可怕,说明是可解决的,只是需要耐心一点去找出错误在哪。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐