一、問題由來
自己在查看日志時發現日志中打印了一行錯誤信息為:
組裝已經放養的寵物數據異常--->Mapper method 'applets.user.mapper.xxxMapper.xxxmyRank attempted to return null from a method with a primitive return type (int).
意思很好理解,就是在某個mapper文件中的xxxmyRank 這個查詢方法返回一個null,可是卻需要返回一個int類型的數,因此報錯。
二、問題分析
fdafdsaf 這個查詢就是一個簡單的查詢,用來查詢一個排名,自己查詢排名的話使用int類型來接收就可以了。最開始測試的時候,也沒什么問題,可是等項目真正上線之后
報出這個問題,才知道之前寫的代碼中存在這個問題。導致這個問題的原因是數據庫沒有查詢到對應的數據,因此返回一個null值,自己寫代碼的時候卻是使用int類型來進行
接收。如下圖所示:
三、解決方案
找到問題的原因后,就很好解決,將接收的int類型改為包裝類型Integer類型類進行接收,這樣就可以解決這個問題。因為Integer類型可以為null,不管返回的具體的數值
還是一個null值,都能夠接收。然后在代碼中去進行null值的業務處理即可,問題解決。
拓展:這種方式主要是針對於在查詢的時候使用。Java代碼中寫自定義的數字字段時,最好也是使用包裝類型來進行接收,
Byte,Boolean,Short ,Character,Integer,Long,Float,Double.
原理是一樣的,假如查詢的實體類中或者使用實體類來接受前端傳遞的數值,有可能沒有值為null,這時候使用包裝類型就可以很好的解決這個問題。