【问题标题】:jackson fasterxml multiple elements with the same namejackson fastxml 多个同名元素
【发布时间】:2016-05-11 09:16:12
【问题描述】:

我需要生成符合此 XSD 的 XML:

<xsd:element name="Line" type="Line" minOccurs="0" maxOccurs="3"/>

所以输出是这样的:

<root>
    <Line>A</Line>
    <Line>B</Line>
    <Line>C</Line>
</root>

问题是,如果我在 Java bean 中注释变量,例如:

@JsonProperty("Line")
private String Line1;

@JsonProperty("Line")
private String Line2;

@JsonProperty("Line")
private String Line3;

然后我得到一个异常,如果我使用 List 则输出错误,例如:

   <root>
       <Line>
           <Line>1 New Orchard Road</Line>
           <Line>Armonk</Line>
       </Line>
   </root>

&lt;Line&gt; 元素过多。有没有办法解决这个问题?

【问题讨论】:

  • 我猜你应该尝试private List&lt;String&gt; lineprivate String[] line 而不是使用三个不同的字段。
  • 不起作用。如问题中所述。
  • 啊,我错过了最后一段中的“Line”。

标签: java xml xsd jackson


【解决方案1】:

您只需要正确的杰克逊注解:

public class ListTest
{
    @JacksonXmlElementWrapper(useWrapping = false)
    public List<String> line = new ArrayList<>();
}

测试:

public static void main(String[] args)
{
    JacksonXmlModule module = new JacksonXmlModule();
    XmlMapper mapper = new XmlMapper(module);
    ListTest lt = new ListTest();
    lt.line.add("A");
    lt.line.add("B");
    lt.line.add("C");
    try {
        mapper.writeValue(System.out, lt);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

输出:

<ListTest><line>A</line><line>B</line><line>C</line></ListTest>

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 2016-04-20
    • 2018-04-02
    相关资源
    最近更新 更多