Переписать ArrayList XML-сериализацию с помощью jackson-dataformat-xml

Если я использую jackson-dataformat-xml для сериализации ArrayList из JsonNode, он выдаст следующее:

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

Я хотел бы прочитать это:

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

Я пытался использовать пользовательский сериализатор и дает мне <event/> теги, которые я хочу, но это все еще оборачивает все в <ArrayList><item></item></ArrayList>

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 ответ

Вы также можете рассмотреть возможность определения имен элементов 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>
Другие вопросы по тегам