BeanUtils和BeanCopier拷贝对象对比

需求描述

在Java后端开发的时候,我们有时为了隔离变化,经常需要把数据库查询出来的实体转为返回前端的对象,我们不希望写很长的set方法去完成,于是可以考虑使用BeanUtils或BeanCopier工具类。下面通过Awards和AwardsResp类的转换简单说明下用法。
Awards类代码:

@Data
public class Awards {
    private Long id;
    private String topClass;
    private List<AwardsDetail> detailList;
}

AwardsResp类代码:

@Data
public class AwardsResp {
    private Long id;
    private String topClass;
    private List<AwardsDetailResp> detailList;
}

BeanUtils

BeanUtils 是org.springframework.beans下面的一个类。
简单用法如下:

AwardsResp resp = new AwardsResp();
BeanUtils.copyProperties(awards,resp);

copyProperties方法相关说明:

  • 不能复制属性名相同但是类型不同的属性(比如Long和Integer)
  • 不能复制list属性
  • 可以把map中的属性设置到对象中
    需要用org.apache.commons.beanutils包下面的类

BeanCopier

BeanCopier是org.springframework.cglib.beans包下面的一个类。
简单用法如下:

AwardsResp resp = new AwardsResp();
// 获取对象
// 第三个参数userConverter,是否开启Convert,默认BeanCopier只会做同名。对于属性名相同类型不同的需要自己写转换器
BeanCopier copier = BeanCopier.create(awards.getClass(), resp.getClass(), false);
// 开始复制
// 第三个参数也是转换器
copier.copy(awards, resp, null);

copy方法相关说明:

  • 默认不能复制属性名相同但是类型不同的属性(比如Long和Integer)。当然可以自己写转换器实现。
  • 可以"复制"list属性(只是把对象的引用指向改变了)
    比如复制后AwardsResp的detailList指向的是Awards的detailList对象地址,Awards的detailList是什么样最终返回的就是什么样,不受List中的类型影响。

Gson或者Fastjson实现对象拷贝

BeanUtils和BeanCopier都不真正支持复制list属性,用Gson或者Fastjson就可以实现。
Gson代码如下:

Gson gson = new Gson();
AwardsResp resq = gson.fromJson(gson.toJson(awards),AwardsResp.class);

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值