2016-02-02 150 views
0

我需要生成XML,確認此XSD:傑克遜fasterxml具有相同名稱的多個元素

<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>元素。有沒有解決的辦法?

+0

我想你應該嘗試'私有列表 line'或'私人字符串[]行'而不是使用三個不同的字段。 – Tom

+1

不起作用。正如問題中提到的那樣。 – Hooli

+0

啊,我錯過了最後一段中的「線路」。 – Tom

回答

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>