前言
由于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()

在使用net.sf.cglib.beans.BeanCopier进行对象属性拷贝时,遇到NullPointerException问题。原因是当源对象的set方法采用链式写法或有返回值时,BeanCopier无法正常工作。解决方案包括去除链式写法或返回值,或改用org.springframework.beans.BeanUtils.copyProperties方法进行属性拷贝。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



