链式写法下,net.sf.cglib.beans.BeanCopier.copy NullPointerException的问题

在使用net.sf.cglib.beans.BeanCopier进行对象属性拷贝时,遇到NullPointerException问题。原因是当源对象的set方法采用链式写法或有返回值时,BeanCopier无法正常工作。解决方案包括去除链式写法或返回值,或改用org.springframework.beans.BeanUtils.copyProperties方法进行属性拷贝。
摘要由CSDN通过智能技术生成

前言

由于MVC分层设计的理念,Java后端开发中,会经常面临各种DTO、DO、PO、VO的对象之间的转换。其中,pojo对象大部分字段名与字段类型一致,为了提供开发效率,避免过多收到set,一般开发者会封装属性拷贝工具类。 而我这边用的就是基于net.sf.cglib.beans.BeanCopier封装的工具类。在最近的使用过程中,发现net.sf.cglib.beans.BeanCopier存在一个问题:如果某类set方法采用了链式写法或者有返回值时,属性拷贝不能正常使用,而且还会发生NullPointerException。

BeanCoiper工具类:

import net.sf.cglib.beans.BeanCopier;
import org.apache.commons.collections4.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

/**
 * cglib copy bean 工具类
 * @author rocky
 * @date 2020/10/22 14:20
 */
public class BeanCopierUtils {
   

    /** 用空间换时间,缓存beanCopier */
    private static final ConcurrentHashMap<String, BeanCopier> BEAN_COPIER_MAP = new ConcurrentHashMap<>();

    /**
     * 拷贝属性
     * @param source 来源
     * @param target 目标
     */
    public static void copyProperties(Object source, Object target) {
   
        String beanKey = generateKey(source.getClass(), target.getClass()
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>