一、问题由来

下午快要下班时,登录测试服务器查看日志信息,看看有没有新的异常信息,如果有的话好及时修改。结果一看果然有新的异常信息。

主要的异常信息如下:

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,然后在使用对象里面的属性,

这就就可以避免上面的问题,修改后的代码如下:

拓展.

这个问题在平时写代码的过程中,还真没注意,一般都认为传入XML中的对象参数不可能为null,可现在却实实在在的出现这个问题。

在对这个项目进行改造的过程中,最初的开发人员基本都是按照info.enterpCd!=null and info.enterpCd!=''方式来写的,只能以后遇到

一个修改一个。除了上面说的这种方式会抛出这种异常外,还有一种方式也会抛出同样的异常。比如对象参数A中包含对象参数B,可

是对象参数B为null,使用时没有对对象参数B做非空校验,就直接使用对象参数B中的属性值,这种情况同样会报这个异常。

最新文章

  1. C#中Abstract和Virtual的区别
  2. ps工具箱总结
  3. Windows下的Memcache安装
  4. Hibernate整合C3P0实现连接池
  5. IOS客户端Coding项目记录(四)
  6. JSON:org.json的基本用法
  7. 在openshift上创建django应用
  8. java新手笔记32 jdk5新特性
  9. 关于Application.Lock和Lock(obj)
  10. linux平台的office文档转pdf(程序员的菜)
  11. 使用cmake安装mysql5.5.13
  12. HDU 3304 Interesting Yang Yui Triangle lucas定理
  13. Objective-C Json 使用
  14. ngx_http_core_module模块提供的变量
  15. 算法训练 区间K大数
  16. [LeetCode] Max Chunks To Make Sorted II 可排序的最大块数之二
  17. APP-FND-00676: 弹性域例程 FDFGDC 无法读取为此说明性弹性域指定的默认引用字段
  18. 一招让 IOS 自动化化快的飞起
  19. 关于12C中optimizer_adaptive_features参数介绍
  20. [linux学习]sysctl 以及 net.ipv4.ip_forward

热门文章

  1. Java使用POI的SXSSFWorkbook与HSSFWorkbook导出复杂表头
  2. 05_Python的文件操作
  3. java-程序流程控制
  4. MyBatis实现与插件开发
  5. 编写高效优雅Java程序
  6. MVC中将枚举类型数据应用到下拉列表中的方法
  7. linux系统jdk安装
  8. MYSQL中的where ‘1=1‘ 探讨
  9. Python实现加密压缩成RAR或ZIP文件
  10. Java常见重构技巧 - 去除不必要的!=null判断空的5种方式,很少有人知道后两种