最近用Dubbo調用其他服務出了一個奇怪的bug,當時看了半天也沒有想通是怎麼出來的。。後來解決的時候感覺這個bug非常的有趣,就記錄一下。
這個bug是這樣的
這個是調用方,這裏的日誌報的錯是類型轉換異常,一直說不能將一個Integer的值轉換爲Dto對象,我就很奇怪,這裏調用的是我的shop方的一個服務,返回的就是這個Dto對象,怎麼會說拿到的是一個Integer值呢?所以我就去shop去看了下這個方式本體,想確認下是這個問題本身是不是出了什麼問題。
但發現這個方法 不管返回的是不是有值,都不應該返回一個Integer對象的啊。
然後Debug跑了半天,最後才發現是我把自己給坑了。。。原來是我給這個方法添加日誌打印的時候的不小心把我的mapper對象的注入@Autowired的關鍵字刪除了。。而代碼也沒有報錯,所以我就沒注意。。然後shop這邊就一直在報空指針的異常。。。
所以這裏就直接進入了catch裏面,然後將我返回的方便查找異常的入參 參數activityId作爲結果返回去了。。所以調用方那邊纔會一直報那個Integer不能轉換爲Dto對象的異常。。那是因爲這個方法進入catch的話,就會將這個方法的入參作爲結果返回的。