【问题标题】:Rewriting ArrayList XML serialisation with jackson-dataformat-xml用 jackson-dataformat-xml 重写 ArrayList XML 序列化
【发布时间】:2016-03-02 09:41:39
【问题描述】:

如果我使用 jackson-dataformat-xml 序列化 JsonNode 的 ArrayList,它会生成以下内容:

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

我想读一下:

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

我尝试使用自定义序列化程序,并确实给了我想要的 &lt;event/&gt; 标签,但它仍然将所有内容包装在 &lt;ArrayList&gt;&lt;item&gt;&lt;/item&gt;&lt;/ArrayList&gt;

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;
    }
}

有什么建议吗?谢谢。

【问题讨论】:

  • 你试过#writeObjectFieldStart("events") 方法吗?
  • 是的,我收到一条错误消息 java.lang.RuntimeException: com.fasterxml.jackson.core.JsonGenerationException: Can not write a field name, expecting a value

标签: java xml serialization jackson jackson-dataformat-xml


【解决方案1】:

您还可以考虑使用annotations 定义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>

【讨论】:

  • 没有注释似乎没有办法做到这一点..有人知道是否有吗?
猜你喜欢
  • 2017-01-11
  • 2017-01-10
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
相关资源
最近更新 更多