美文网首页
java 返回前端的字段莫名为空 引用对象的坑

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

作者: 饱饱抓住了灵感 | 来源:发表于2023-03-07 21:01 被阅读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;

相关文章

网友评论

      本文标题:java 返回前端的字段莫名为空 引用对象的坑

      本文链接:https://www.haomeiwen.com/subject/htjgldtx.html