前篇
No1.正在搭建ES-MQ-Cache-Demo,該項目是以Spring Boot + Spring Data為核心架構(gòu)開發(fā)。主要流程為通過AOP來記錄用戶日志,通過ActiveMQ Quene將日志放入消息隊列,Consumer消費時將日志全文檢索至ElasticSerach。
No2.用戶能夠正常操作,日志也能夠正常記錄。但是當(dāng)通過API查詢?nèi)罩緯r發(fā)現(xiàn)報空指針異常。
測試()

image.png
可以發(fā)現(xiàn),數(shù)據(jù)是存在的

image.png
F9會發(fā)現(xiàn)拋了空指針異常,很郁悶,明明數(shù)據(jù)是有的,但是為什么會空指針呢?
查問題
測試發(fā)現(xiàn)數(shù)據(jù)是沒有問題。很頭疼,不如我們在這個方法同樣記錄一下日志,看返回值是否正常。
如果返回值正常,則我們測試是否為FastJson解析有問題,如果FastJson解析沒有問題就再深入研究(理論上只可能是FastJson的問題)
@SysLog(日志記錄AOP)

image.png

image.png
發(fā)現(xiàn)結(jié)果是正常返回的,那就手動序列化為Json
結(jié)果:好吧,空指針,說明是FastJson序列化的問題,那我們測試一下Jackson

image.png
結(jié)果:好吧,空指針,說明不一定是序列化的問題(出于對FastJson的不信任,所以拿Jackson測試一下證明)
那我們就深入一下,到底是哪里出了問題
經(jīng)過debug發(fā)現(xiàn),異常出現(xiàn)在這里

image.png
結(jié)果
因為查看日志信息,只能到達write方法,后續(xù)方法是ASM字節(jié)碼組裝而成,無法debug,但通過日志信息科一得到最終的異常是由于AggregatedPageImpl,這個類就是Spring Data Page類的子類AggregatedPageImpl,說明問題出在這個類上。希望以后注意
解決方法
1.自己封裝Page類
2.page.getContent()