【问题标题】:How to serialize an array to XML, using node names defined at runtime?如何使用运行时定义的节点名称将数组序列化为 XML?
【发布时间】:2019-11-30 08:20:21
【问题描述】:

我想在我的 Spring Boot 应用程序中使用 Jackson 将一组 POJO 序列化为自定义 XML 格式。节点名称child将在运行时修改。

我已经设法用一个这样的孩子创建了一个根:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.util.Arrays;
import java.util.List;
import java.util.Random;

class MyPojo {
    public int random = new Random().nextInt();

    public static void main(String[] args) throws JsonProcessingException {
        List<MyPojo> list = Arrays.asList(new MyPojo(), new MyPojo());
        XmlMapper mapper = new XmlMapper();
        final ObjectWriter writer = mapper.writer().withRootName("parent");
        ObjectNode node = mapper.createObjectNode();
        list.forEach(x -> node.putPOJO("child", x)); // <= does not work, replaces values instead of adding them
        String s = writer.writeValueAsString(node);
        System.out.println(s);
    }

}

我希望它输出:

<parent>
    <child>
        <random>123</random>
    </child>
    <child>
        <random>234</random>
    </child>
</parent>

但当前代码只输出:

<parent>
    <child>
        <random>234</random>
    </child>
</parent>

如何添加多个子节点并仍保留我自己的节点名称?

【问题讨论】:

    标签: java xml spring serialization jackson


    【解决方案1】:

    您需要输入一个ArrayNode 并将孩子添加到其中

    OjectNode node = mapper.createObjectNode();
    ArrayNode arrayNode = node.putArray("child");
    list.forEach(x -> arrayNode.addPOJO(x));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      相关资源
      最近更新 更多