FatalBeanException: Could not copy property ‘xxx‘ from source to target; nested exception is

在这里插入图片描述

〇、问题分析

在调试中出现这个错。

org.springframework.beans.FatalBeanException: Could not copy property ‘xxx’ from source to target; nested exception is java.lang.IllegalArgumentException

发生的代码是


import org.springframework.beans.BeanUtils

/**
 * 属性拷贝, 当且仅当两个对象的非静态属性名称相同且对应的属性类型也相同时才进行属性值拷贝
 * @param source 源对象
 * @param target 目标对象
 */
public static void copyProperties(Object source, Object target) {
    try {
        // 源对象进行深复制
        Object src = deepClone(source);
        source = null;  //释放
        BeanUtils.copyProperties(src, target);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

定位出来就是两个对象进行复制的时候报错了,说字段xxx复制报错。
初略排查看不出端倪,因为连个对象都有该字段,字段的值也没有什么越界什么的。
后来仔细对比之后发现,复制源的值是null,但是按照经验主义
null在以往的复制过程中是不会报错的。

再次深入对比,这才发现问题
source的xxx是用Integer定义,而target是用int定义的!

所以现在就变成了将null复制给int类型的变量,在java中,int是基本类型,null是关键字,null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,但是不能赋给基本类型!
所以这就是这个错的答案


一、问题解决

两种方式:

1、将int改成Integer,或者将Integer改成int,使两个对象的变量类型统一
2、提前将Integer的空值赋予int的默认值0,再进行复制

建议方案:

将int改成Integer,在项目中,非常不建议用基本数据类型。
因为很多场景中对象有很多,类型也很复杂,经常转来转去,比如string和整型,长整型,浮点型等的互转。
因为string通常都会是null,如果数值型数据类型使用基本数据类型,每次都要考虑null的场景,而且用默认0也不合适,再结合很多判断异常的工具类都只对null检验,就更不合适了

另外,延伸一下,在java中,万物皆对象,基本类型一方面是历史原因(新版本需要向下兼容);
另一方面是基本数据类型性能更高,使用在对性能要求极高的场景,如底层对接,通讯对接等等。
但是我们平常的业务开发根本不需要考虑这些,更多的是提高编码效率,项目结构健壮性上。

完毕

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
"nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property"这个异常是MyBatis在设置属性时发生的反射异常。这个异常通常发生在设置属性值时传入的参数类型与属性类型不匹配的情况下。根据引用中的错误信息,异常是由于无法将值'1539102131662880769'赋给属性'id',导致反射异常。 为了解决这个问题,你可以检查变量类型是否正确。确保传入的参数类型与属性类型一致。另外,还可以检查是否在配置文件中正确设置了主键自增的方式,以确保在插入数据时能够正确生成主键值。引用中提到的配置可以尝试添加到MyBatis的配置文件中,确保使用数据库的主键自增方式。 如果仍然无法解决该问题,你可以查看其他相关资料,了解更多关于这个异常的处理方法,引用提供的文章可能会对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property ‘id‘ ...](https://blog.csdn.net/m0_45877477/article/details/125388756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Mybatis报错: org.apache.ibatis.exceptions.PersistenceException解决办法](https://download.csdn.net/download/weixin_38524871/12828533)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cy谭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值