异常:ognl.OgnlException: target is null for setProperty

本文记录了一次解决页面提交时出现的ognl.OgnlException异常的经历,原因是实体对象缺少无参数构造函数。文中详细解释了问题的原因及解决方法。

 自己的一个大意,造就了一个错误,找了大半天总算是找到了问题的所在。哈哈,高兴一下。。

开始在网上找了一下相关的,但都不是我这个问题所在。还好,问题解决了。

 

问题是这样的,实体对象一定要有一个无参数的构造函数。本来吗,你自个不写一个带参的函数当然不会有这个问题了。但写了就可能不写一个无参数的构造函数。否则就会报-------异常:ognl.OgnlException: target is null for setProperty

这个是在页面提交时,通过ognl,先调用无参数的构造函数,然后再调用相应的setter方法去可构造实体对象,没有无参数的构造函数,当然报错了。

你遇到的错误: ``` Error evaluating expression 'sourceData.batteryId != null'. Cause: source is null for getProperty(null, "batteryId") ``` ### ❓错误原因: 这个错误说明你在 MyBatis 的 `<if>` 条件判断中引用了 `sourceData.batteryId`,但 `sourceData` 是 `null`,导致 MyBatis 无法访问 `batteryId` 属性。 这是 MyBatis 使用 OGNL 表达式时的常见问题,尤其是在动态 SQL 中判断嵌套对象属性时。 --- ### ✅ 解决方案: #### ✅ 方法一:使用 `<if test="sourceData != null and sourceData.batteryId != null">` 在访问嵌套属性前,**先判断对象是否为 null**,避免空指针异常。 ```xml <if test="sourceData != null and sourceData.batteryId != null"> AND battery_id = #{sourceData.batteryId} </if> ``` --- #### ✅ 方法二:使用 `@MapKey` 或 `@Param` 注解明确参数名(适用于 Java 代码传参) 如果你在 Mapper 接口中使用了多个参数对象,建议用 `@Param` 明确命名参数: ```java List<BatteryInfo> selectByCondition(@Param("sourceData") BatteryInfo sourceData); ``` 然后在 XML 中使用: ```xml <if test="sourceData != null and sourceData.batteryId != null"> AND battery_id = #{sourceData.batteryId} </if> ``` --- #### ✅ 方法三:使用 `Map` 传参(适合动态参数) 你可以将参数封装为 `Map`,这样可以避免对象为 `null` 导致的问题: ```java Map<String, Object> params = new HashMap<>(); params.put("sourceData", sourceData); // sourceData 可能为 null ``` XML 中同样使用: ```xml <if test="sourceData != null and sourceData.batteryId != null"> AND battery_id = #{sourceData.batteryId} </if> ``` --- ### ✅ 总结 | 问题 | 原因 | 解决方法 | |------|------|----------| | `source is null for getProperty(null, "batteryId")` | 访问了 `null` 对象的属性 | 在访问嵌套属性前先判断对象是否为 null | ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值