You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个第三方POJO合并为单个POJO并通过Jackson序列化

合并第三方POJO并序列化JSON的实现方法

针对你的需求,这里提供几种实用的实现方法,你可以根据实际场景选择:

1. 手动属性映射(直观可控)

如果第三方POJO的属性不多,直接手动把属性值拷贝到自定义的OurPojo里是最直接的方式,后续用Jackson序列化也很简单:

import com.fasterxml.jackson.databind.ObjectMapper;

public class PojoMergeDemo {
    public static void main(String[] args) throws Exception {
        // 初始化第三方POJO实例
        ThirdPartyPojo1 pojo1 = new ThirdPartyPojo1();
        pojo1.setRandom1("test-value-1");
        
        ThirdPartyPojo2 pojo2 = new ThirdPartyPojo2();
        pojo2.setRandom2("test-value-2");
        
        // 把两个第三方POJO的属性映射到自定义POJO
        OurPojo ourPojo = new OurPojo();
        ourPojo.setRandom1(pojo1.getRandom1());
        ourPojo.setRandom2(pojo2.getRandom2());
        
        // 使用Jackson将OurPojo序列化为JSON字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String mergedJson = objectMapper.writeValueAsString(ourPojo);
        System.out.println(mergedJson); 
        // 输出结果: {"random1":"test-value-1","random2":"test-value-2"}
    }
}

2. 用BeanUtils批量拷贝(减少重复代码)

如果第三方POJO的属性很多,手动写一堆set/get太繁琐,可以用Spring的BeanUtils或者Apache Commons BeanUtils来自动拷贝属性,只要属性名称完全匹配就能自动映射:

Spring BeanUtils示例:

import org.springframework.beans.BeanUtils;
import com.fasterxml.jackson.databind.ObjectMapper;

public class PojoMergeWithBeanUtils {
    public static void main(String[] args) throws Exception {
        ThirdPartyPojo1 pojo1 = new ThirdPartyPojo1();
        pojo1.setRandom1("test-value-1");
        
        ThirdPartyPojo2 pojo2 = new ThirdPartyPojo2();
        pojo2.setRandom2("test-value-2");
        
        OurPojo ourPojo = new OurPojo();
        // 先拷贝pojo1的属性到ourPojo
        BeanUtils.copyProperties(pojo1, ourPojo);
        // 再拷贝pojo2的属性到ourPojo
        BeanUtils.copyProperties(pojo2, ourPojo);
        
        // 序列化JSON
        ObjectMapper objectMapper = new ObjectMapper();
        String mergedJson = objectMapper.writeValueAsString(ourPojo);
        System.out.println(mergedJson);
    }
}

注意:如果两个第三方POJO存在重名属性,后执行的拷贝会覆盖前面的属性值,要根据你的业务逻辑调整拷贝顺序。

3. 动态合并(无需预先定义OurPojo)

要是你不想提前创建OurPojo类,也可以用Jackson的ObjectNode动态合并两个POJO的JSON节点,直接生成合并后的JSON字符串:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class DynamicPojoMerge {
    public static void main(String[] args) throws Exception {
        ThirdPartyPojo1 pojo1 = new ThirdPartyPojo1();
        pojo1.setRandom1("test-value-1");
        
        ThirdPartyPojo2 pojo2 = new ThirdPartyPojo2();
        pojo2.setRandom2("test-value-2");
        
        ObjectMapper objectMapper = new ObjectMapper();
        // 将两个POJO转换为Jackson的ObjectNode
        ObjectNode node1 = objectMapper.valueToTree(pojo1);
        ObjectNode node2 = objectMapper.valueToTree(pojo2);
        
        // 合并节点:把node2的所有属性添加到node1,重名属性会被node2覆盖
        node1.setAll(node2);
        
        // 输出合并后的JSON
        String mergedJson = objectMapper.writeValueAsString(node1);
        System.out.println(mergedJson);
    }
}

内容的提问来源于stack exchange,提问作者lostSoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:32:51