从Kafka获取jaon数据入库,获取到的数据有data和key两个json,key为需要修改的字段,data为原数据,直接将key的数据通过jpa的save入库会导致未修改字段置空,现需将两个类的数据合并,如果key里面没有将使用data的值

package com.onelink.inbound.util;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class CombineBeans {

    /**
     * 该方法是用于相同对象不同属性值的合并,如果两个相同对象中同一属性都有值,那么sourceBean中的值会覆盖tagetBean重点的值
     * @param sourceBean    被提取的对象bean
     * @param targetBean    用于合并的对象bean
     * @return targetBean,合并后的对象
     */
    public static <T> T combineSydwCore(T  sourceBean, T  targetBean){
        Class sourceBeanClass = sourceBean.getClass();
        Class targetBeanClass = targetBean.getClass();

        Field[] sourceFields = sourceBeanClass.getDeclaredFields();
        Field[] targetFields = targetBeanClass.getDeclaredFields();
        for(int i=0; i<sourceFields.length; i++){
            Field sourceField = sourceFields[i];
            if(Modifier.isStatic(sourceField.getModifiers())){
                continue;
            }
            Field targetField = targetFields[i];
            if(Modifier.isStatic(targetField.getModifiers())){
                continue;
            }
            sourceField.setAccessible(true);
            targetField.setAccessible(true);
            try {
                Object a = sourceField.get(sourceBean);
                if(!"null".equals(sourceField.get(sourceBean)) &&sourceField.get(sourceBean) != null &&  !"serialVersionUID".equals(sourceField.getName())){
                    targetField.set(targetBean,sourceField.get(sourceBean));
                }
            } catch (IllegalArgumentException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        T instance = null;
        try {
            instance = targetBean;
        }catch (Exception e){
            return null;
        }
        return instance;
    }
}

参考链接https://www.cnblogs.com/qxynotebook/p/5680228.html