我知道我来不及在这里回答。但是我是为那些偶然发现这个问题并想使用@Cassio答案的新人写这篇文章的。
使用 反序列化为 的问题是,当在同一级别上有多个具有相同名称的元素时,它将用新元素替换前一个元素,并最终导致数据丢失。通常,我们必须将其添加到数组中。为了解决这个问题,我们可以覆盖类的方法。足够多的谈话。让我们看看代码XmlMpper
JsonNode
_handleDuplicateField()
JsonNodeDeserializer
public class DuplicateToArrayJsonNodeDeserializer extends JsonNodeDeserializer {
@Override
protected void _handleDuplicateField(JsonParser p, DeserializationContext ctxt,
JsonNodeFactory nodeFactory,String fieldName, ObjectNode objectNode,
JsonNode oldValue, JsonNode newValue) throws JsonProcessingException {
ArrayNode node;
if(oldValue instanceof ArrayNode){
node = (ArrayNode) oldValue;
node.add(newValue);
} else {
node = nodeFactory.arrayNode();
node.add(oldValue);
node.add(newValue);
}
objectNode.set(fieldName, node);
}
}
由于我们已经覆盖了默认的反序列化程序,因此我们还需要在 中注册此反序列化程序以使其正常工作。XmlMapper
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.registerModule(new SimpleModule().addDeserializer(
JsonNode.class,
new DuplicateToArrayJsonNodeDeserializer()
));
JsonNode node = xmlMapper.readTree(payLoad);