猿问

如何使用运行时定义的节点名称将数组序列化为 XML?

我想在我使用 Jackson 的 spring boot 应用程序中将一组 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>

我怎样才能添加几个孩子并仍然保留我自己的节点名称?


慕森王
浏览 122回答 1
1回答

慕妹3146593

您需要放置一个ArrayNode并将孩子添加到其中OjectNode node = mapper.createObjectNode();ArrayNode arrayNode = node.putArray("child");list.forEach(x -> arrayNode.addPOJO(x));
随时随地看视频慕课网APP

相关分类

Java
我要回答