需求描述
在Java后端开发的时候,我们有时为了隔离变化,经常需要把数据库查询出来的实体转为返回前端的对象,我们不希望写很长的set方法去完成,于是可以考虑使用BeanUtils或BeanCopier工具类。下面通过Awards和AwardsResp类的转换简单说明下用法。
Awards类代码:
1 |
|
AwardsResp类代码:
1 |
|
BeanUtils
BeanUtils 是org.springframework.beans下面的一个类。
简单用法如下:
1 | AwardsResp resp = new AwardsResp(); |
copyProperties方法相关说明:
- 不能复制属性名相同但是类型不同的属性(比如Long和Integer)
- 不能复制list属性
- 可以把map中的属性设置到对象中
需要用org.apache.commons.beanutils包下面的类
BeanCopier
BeanCopier是org.springframework.cglib.beans包下面的一个类。
简单用法如下:
1 | AwardsResp resp = new AwardsResp(); |
copy方法相关说明:
- 默认不能复制属性名相同但是类型不同的属性(比如Long和Integer)。当然可以自己写转换器实现。
- 可以"复制"list属性(只是把对象的引用指向改变了)
比如复制后AwardsResp的detailList指向的是Awards的detailList对象地址,Awards的detailList是什么样最终返回的就是什么样,不受List中的类型影响。
Gson或者Fastjson实现对象拷贝
BeanUtils和BeanCopier都不真正支持复制list属性,用Gson或者Fastjson就可以实现。
Gson代码如下:
1 | Gson gson = new Gson(); |