org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, "enterpCd")-Mybatis報錯


一、問題由來

下午快要下班時,登錄測試服務器查看日志信息,看看有沒有新的異常信息,如果有的話好及時修改。結果一看果然有新的異常信息。

主要的異常信息如下:

2020-10-13 14:51:03,036 [http-nio-8091-exec-10] ERROR c.s.f.controller.SmeControllerAdvice 164 - nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'info.enterpCd!=null and info.enterpCd!='''. Cause: org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, "enterpCd")
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'info.enterpCd!=null and info.enterpCd!='''. Cause: org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, "enterpCd")

心想這又是給自己找活干啊,既然有異常,那就及時改唄。第一步就是找到對應的mapper.xml文件,使用關鍵字info.enterpCd!=null and info.enterpCd!=''

進行搜索,很快找到了對應的xml文件,原代碼為:

 

 異常就是這里拋出來的,一眼看上去也沒什么問題啊,怎么就拋異常了呢?

二、問題分析

從拋出的異常信息中可以看出大致意思是說,資源為null。然后立馬百度,查看了很多網友的意見,報的錯都是一模一樣的,由此找到了問題的真正原因;

報這個異常的真正原因是傳入的參數info為null,然后在使用null來取值null.enterpCd,因此報了這個異常。因為傳入的對象本身就為null,不能再從中取值。


三、解決方案

搞清楚問題的原因后,就很好解決了,在使用這個傳入的參數對象時,做一個非空校驗即可。先判斷這個對象不為null,然后在判斷對象的屬性不為null,

最后在使用對象里面的屬性,這就就可以避免上面的問題,修改后的代碼如下:

 

 

拓展.

這個問題在平時寫代碼的過程中,還真沒注意,一般都認為傳入XML中的對象參數不可能為null,可現在卻實實在在的出現這個問題。

在對這個項目進行改造的過程中,最初的開發人員基本都是按照info.enterpCd!=null and info.enterpCd!=''方式來寫的,只能以后遇到

一個修改一個。除了上面說的這種方式會拋出這種異常外,還有一種方式也會拋出同樣的異常。比如對象參數A中包含對象參數B,可

是對象參數B為null,使用時沒有對對象參數B做非空校驗,就直接使用對象參數B中的屬性值,這種情況同樣會報這個異常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM