【高阶开发技巧】对象转化二三事

  • 业务场景:

把前端传进来的VO跟需要数据处理的PO进行转换,或者调用的返回值需要调整个别属性值然后做进一步处理,下面的两种方法就是针对上述场景进行处理。

  • 转换方法:
  1. 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()去转换相应的属性值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值