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

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

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


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

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

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