Java 保持POJO不变如何使用Jackson在JSON中注入新字段?

Java 保持POJO不变如何使用Jackson在JSON中注入新字段?,java,json,serialization,jackson,pojo,Java,Json,Serialization,Jackson,Pojo,我的最终目标是,我有一个POJO列表。我需要使用Jackson将其转换为JSON字符串。当转换为JSON时。我需要再加几把钥匙。 为了做到这一点,我只有一个解决办法。如果我将POJO的列表转换为对象节点的列表,这样我就可以在对象节点中添加信息。之后,我将转换为JSON字符串 List dummyPOJO=getPOJO() ObjectNode ObjectNode=mapper.convertValue(dummyPOJO,newtypereference(){}) 此代码给出了一个follo

我的最终目标是,我有一个POJO列表。我需要使用Jackson将其转换为JSON字符串。当转换为JSON时。我需要再加几把钥匙。 为了做到这一点,我只有一个解决办法。如果我将POJO的列表转换为对象节点的列表,这样我就可以在对象节点中添加信息。之后,我将转换为JSON字符串

List dummyPOJO=getPOJO()
ObjectNode ObjectNode=mapper.convertValue(dummyPOJO,newtypereference(){})

此代码给出了一个follow错误

java.lang.ClassCastException:java.util.ArrayList不能强制转换为com.fasterxml.jackson.databind.node.ObjectNode


如果有任何解决方案,请告诉我。提前感谢:)

以下代码似乎不正确

ObjectNode objectNode = mapper.convertValue(dummyPOJO, new TypeReference<List<ObjectNode>>(){});
现在将创建一些Person对象并将其转换为
列表
结构

然后将迭代所有ObjectNode,并在Person ObjectNode中添加新的字段Sex

但POJO结构将保持不变

JSONListConverter.java

package sep2020;

import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class JSONListConverter {
    public static void main(String[] args) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);

        // Define map which will be converted to JSON
        List<Person> personList = Stream.of(new Person("A", "B", 34),
                new Person("C", "D", 75), new Person("E", "F", 21),
                new Person("G", "H", 55)).collect(Collectors.toList());

        List<ObjectNode> objectNodes = objectMapper.convertValue(personList,
                new TypeReference<List<ObjectNode>>() {
                });

        JsonNode jsonNode = objectMapper.convertValue(objectNodes,
                JsonNode.class);
        // Existing Json structure
        System.out.println("Existing Json:\n"
                + objectMapper.writeValueAsString(jsonNode));
        System.out.println("\n\n");
        // Adding an extra field
        if (objectNodes != null && objectNodes.size() > 0) {
            for (ObjectNode objectNode : objectNodes) {
                objectNode.put("Sex", "M");
            }
        }
        jsonNode = objectMapper.convertValue(objectNodes, JsonNode.class);
        // Updated Json structure
        System.out.println("Updated Json:\n"
                + objectMapper.writeValueAsString(jsonNode));
    }
}
List<ObjectNode> objectNodes = mapper.convertValue(dummyPOJO, new TypeReference<List<ObjectNode>>(){});
package sep2020;

public class Person {
    public String firstName;
    public String lastName;
    public int age;

    public Person() {
    }

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String toString() {
        return "[" + firstName + " " + lastName + " " + age + "]";
    }
}
package sep2020;

import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class JSONListConverter {
    public static void main(String[] args) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);

        // Define map which will be converted to JSON
        List<Person> personList = Stream.of(new Person("A", "B", 34),
                new Person("C", "D", 75), new Person("E", "F", 21),
                new Person("G", "H", 55)).collect(Collectors.toList());

        List<ObjectNode> objectNodes = objectMapper.convertValue(personList,
                new TypeReference<List<ObjectNode>>() {
                });

        JsonNode jsonNode = objectMapper.convertValue(objectNodes,
                JsonNode.class);
        // Existing Json structure
        System.out.println("Existing Json:\n"
                + objectMapper.writeValueAsString(jsonNode));
        System.out.println("\n\n");
        // Adding an extra field
        if (objectNodes != null && objectNodes.size() > 0) {
            for (ObjectNode objectNode : objectNodes) {
                objectNode.put("Sex", "M");
            }
        }
        jsonNode = objectMapper.convertValue(objectNodes, JsonNode.class);
        // Updated Json structure
        System.out.println("Updated Json:\n"
                + objectMapper.writeValueAsString(jsonNode));
    }
}
Existing Json:

[ {
  "firstName" : "A",
  "lastName" : "B",
  "age" : 34
}, {
  "firstName" : "C",
  "lastName" : "D",
  "age" : 75
}, {
  "firstName" : "E",
  "lastName" : "F",
  "age" : 21
}, {
  "firstName" : "G",
  "lastName" : "H",
  "age" : 55
} ]



Updated Json:

[ {
  "firstName" : "A",
  "lastName" : "B",
  "age" : 34,
  "Sex" : "M"
}, {
  "firstName" : "C",
  "lastName" : "D",
  "age" : 75,
  "Sex" : "M"
}, {
  "firstName" : "E",
  "lastName" : "F",
  "age" : 21,
  "Sex" : "M"
}, {
  "firstName" : "G",
  "lastName" : "H",
  "age" : 55,
  "Sex" : "M"
} ]