- 业务场景:
把前端传进来的VO跟需要数据处理的PO进行转换,或者调用的返回值需要调整个别属性值然后做进一步处理,下面的两种方法就是针对上述场景进行处理。
- 转换方法:
- BeanUtils.copyProperties(source,target)
此方法是spring-framework为bean提供的包中唯一工具类。官方的文档说:此方法可以将源对象中的属性值复制给目的对象。源对象和目的对象均需要有相同的属性才能进行此操作,此方法适合的场景是两个对象具有相同的属性,需要将对象A拷贝给对象B。下面是一个例子:
import org.springframework.beans.BeanUtils;
void copyProperties(){
AgentIdsReq agentIdsReq = new AgentIdsReq();
SkillIdsReq skillIdsReq = new SkillIdsReq();
BeanUtils.copyProperties(agentIdsReq,skillIdsReq);
// continue to process
}
2. 函数式接口Function方法转换对象
对于有大量属性的对象转换问题,可以使用java的新特性,函数上接口处理。具体方式是:在需要转换的类后面增加一个私有Function方法,在具体转换中引用此方法。具体使用举例请参看下面的案例:
对象转换:
private Function<order, orderInfo> getOrderInfo = order -> orderInfo.builder()
.callId(order.getCallId())
.orderNo(order.getOrderNo())
.treatmentDay(order.getTreatmentDay())
.build();
list转换:
private Function<orderList, orderInfo> getHisOrderCancelItemFromOld = item -> {
return orderInfo.builder()
.treatmentDay(item.getDutyDate())
.treatmentWeek(item.getWeekText())
.treatmentTime(item.getDutyCodeText())
.deliverName(item.getDeliverName())
.cardNo(item.getIdNo())
.phone(item.getMobileNo())
.createTime(DateUtil.parse(item.getCreateTime(), DateUtils.datetimeFormat))
.cancelTime(item.getCancelTime() != null ? DateUtil.parse(item.getCancelTime(), DateUtils.datetimeFormat) : null)
.cancelChannel(item.getCancelChannelText())
.build();
};
- 后记:
本文章只记录了比较高级的转换方法,如果时间紧、任务重,也可以用最常用的getXXX()去转换相应的属性值。