如何将多个第三方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
相关产品推荐
相关产品推荐

