Spring 的 BeanUtils.copyProperties目标实体存在但缺少某个字段
当使用 Spring 的 BeanUtils.copyProperties 时,如果目标实体存在但缺少某个字段,这个字段会被静默忽略,不会报错,也不会被复制。
这是它的一个核心行为,而非缺陷,但也因此容易导致不易察觉的数据丢失。
🔍 被静默忽略的具体场景
为了让理解更具体,这里列举了几种常见的字段复制失败,但不会报错的场景:
| 场景 | 原因 | 后果 |
|---|---|---|
| 目标类缺少该字段 | 目标对象没有定义同名字段,BeanUtils找不到对应的 set 方法。 | 字段值被静默忽略,目标对象中该字段值为null或默认值。 |
源对象字段为 null | 默认情况下,它会将源对象中的 null 值覆盖到目标对象的对应字段上。 | 会覆盖掉目标对象中已有的非空值。 |
| 字段名不匹配 | 两个类中字段名不完全一致,如 userName vs username。 | 因名称映射不上,导致数据丢失。 |
| 类型不匹配 | 源字段是 Long 类型,目标是 |