当前位置: 首页 > 知识库问答 >
问题:

使用jackson-dataformat-xml重写ArrayList XML序列化

宋凌龙
2023-03-14

如果我使用jackson dataformat xml序列化JsonNode的ArrayList,它会产生以下结果:

<ArrayList><item>...</item><item>...</item></ArrayList>

我想把它读出来:

<events><event>...</event><event>...</event></events>

我尝试过使用自定义序列化程序,并确实给了我

public class ArrayListSerializer extends JsonSerializer<ArrayList<JsonNode>> {

    @Override
    public void serialize(ArrayList<JsonNode> value, JsonGenerator gen,
            SerializerProvider serializers)
            throws IOException, JsonProcessingException {
        gen.writeStartObject();

        for (JsonNode node : value) {
            gen.writeObjectField("event", node);
        }

        gen.writeEndObject();
    }

    @Override
    public Class<ArrayList<JsonNode>> handledType() {
        @SuppressWarnings("unchecked")
        Class<ArrayList<JsonNode>> typeClass = (Class<ArrayList<JsonNode>>)(Class<?>)List.class;
        return typeClass;
    }
}

有什么建议吗?谢谢。


共有1个答案

范飞翰
2023-03-14

您还可以考虑使用注释定义XML元素名称。这是一个例子:

public class JacksonXmlArray {
    static class Document {
        @JsonProperty
        @JacksonXmlElementWrapper(localName = "events")
        @JacksonXmlProperty(localName = "event")
        List<String> events = Arrays.asList("a", "b");
    }
    public static void main(String[] args) throws JsonProcessingException {
        final XmlMapper xmlMapper = new XmlMapper();
        System.out.println(xmlMapper.writeValueAsString(new Document()));
    }
}

输出:

<Document xmlns=""><events><event>a</event><event>b</event></events></Document>
 类似资料: