如何使用JAXB注释字符串列表?

sup*_*sky 5 java xml annotations jaxb marshalling

说我有以下内容:

@XmlRootElement(name = "foo1")
public class Foo1
{
    @XmlElementWrapper( name="answerList" )
    @XmlElement( name="answer" )
    private List<String> answerList;
}
Run Code Online (Sandbox Code Playgroud)

如果Foo1实例被编组,它将看起来像这样

<foo1>
    <answerList>
        <answer>myAnswer1</answer>
        <answer>myAnswer2</answer>
    </answerList>
</foo1>
Run Code Online (Sandbox Code Playgroud)

现在,如果我有以下属性:

private List<List<String>> answerListsList;
Run Code Online (Sandbox Code Playgroud)

我如何注释上面的属性,所以我将有以下XML(当然,没有创建一个新类来保存字符串列表)?

<foo1>
    <answerLists>
        <answerList>
            <answer>row1 myAnswer1</answer>
            <answer>row1 myAnswer2</answer>
        </answerList>
        <answerList>
            <answer>row2 myAnswerA</answer>
            <answer>row2 myAnswerB</answer>
        </answerList>
    <anserLists>
</foo1>
Run Code Online (Sandbox Code Playgroud)

编辑:

不想创建新类的原因是我试图避免创建太多类.在我看来,为你可能拥有的每个字符串列表创建一个新类,它碰巧使用不同的元素名称,这不是一个好的设计.

我可以考虑创建一个新类作为答案,只要该类可以根据需要编组到不同的元素名称和元素包装器中.例如,该类应该能够表示以下XML:

<answerLists>
    <answerList>
        <answer>row1 myAnswer1</answer>
        <answer>row1 myAnswer2</answer>
    </answerList>
    <answerList>
        <answer>row2 myAnswerA</answer>
        <answer>row2 myAnswerB</answer>
    </answerList>
<anserLists>
Run Code Online (Sandbox Code Playgroud)

要么

<myLists>
    <myList>
        <item>row1 d1</item>
        <item>row1 d2</item>
    </myList>
    <myList>
        <item>row2 dA</item>
        <item>row2 dB</item>
    </myList>
</myLists>
Run Code Online (Sandbox Code Playgroud)

Ily*_*lya 3

如果不创建新类,您就无法获得所需的 XML!

我写了这个类:

@XmlRootElement( name="foo1" )
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo1<T>
{
    @XmlElementWrapper( name="answerList" )
    @XmlElement( name="answer" )
    List<T> answerList = new ArrayList<T>();
}
Run Code Online (Sandbox Code Playgroud)

List in List 的用法是这样的:

Foo1<Foo1<String>> ff = new Foo1<Foo1<String>>();  
Run Code Online (Sandbox Code Playgroud)

但输出 XML 并不是您想要的样子,因为如果不创建新类,就无法生成您想要获得的 XML!