java 返回前端的字段莫名为空 引用对象的坑

2023-03-07  本文已影响0人  饱饱抓住了灵感

发生条件

当以下3个条件同时满足时, 问题就会发生:

  1. 返回前端的VO对象包含着另一引用对象;
  2. 在返回前对引用对象的字段进行了赋值;
  3. 有多个展示对象关联着相同的引用对象;

结果

最后一次的赋值会覆盖掉前面所有的赋值

解决

使用新对象接收引用对象的值(即字段拷贝), 在新对象上字段上赋值, 然后VO对象关联新对象

代码示例

错误代码:

// 用户数据
List<User> users = getUsers();
// 车牌号映射车辆对象
Map<String, Car> mapNoToCar = getMapNoToCar();

for(User usr: users){
  Car car = mapNoToCar.get(usr.getCarNo());
  car.setName(usr.getName()+usr.getAge());
  usr.setCar(car);
}
return users;

如上代码, 前端展示user.car.name会出错

以下为修正后的代码, user.car.name可正常展示:

// 用户数据
List<User> users = getUsers();
// 车牌号映射车辆对象
Map<String, Car> mapNoToCar = getMapNoToCar();

for(User usr: users){
  Car car = mapNoToCar.get(usr.getCarNo());
  // 新建对象接收引用对象值
  Car copyCar = new Car();
  BeanUtils.copyPrperties(car, copyCar);
  copyCar.setName(usr.getName()+usr.getAge());
  usr.setCar(copyCar);
}
return users;

上一篇 下一篇

猜你喜欢

热点阅读