Jackson FasterXML:同名多个元素

4

我需要生成符合以下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>

带有一个多余的父级元素<Line>。有没有什么办法解决这个问题?

我猜你应该尝试使用private List<String> line或者private String[] line代替使用三个不同的字段。 - Tom
1
无法正常工作。如问题中所述。 - Hooli
啊,我在上一个段落中漏掉了“Line”。 - Tom
1个回答

10

你所需的只是适当的Jackson注解:

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接