2

为什么我会得到这个结构?我会期望 quiz-->questions--> 和两个问题元素,而不是两个问题元素?

@XmlRootElement
public class Quiz {

    private List<Question> questions;

    public Quiz() {
        questions = new ArrayList<Question>();
    }

    public List<Question> getQuestions() {
        return questions;
    }

    public void setQuestions(List<Question> questions) {
        for (Question question : questions) {
            addQuestion(question);
        }
    }

    public void addQuestion(final Question question) {
        if (!(questions.contains(question))) {
            questions.add(question);
        }
    }

    public void removeQuestion(final Question question) {
        if (questions.contains(question)) {
            questions.remove(question);
        }
    }

    public int numberOfQuestions() {
        return questions.size();
    }
}

问题:

@XmlRootElement
public class Question extends AbstractModel {

}

<quiz><questions></questions><questions></questions></quiz>
4

2 回答 2

3

默认情况下,JAXB (JSR-222) 实现不提供分组元素。你可以用@XmlElementWrapper得到一个。

@XmlElementWrapper
@XmlElement(name="question")
public List<Question> getQuestions() {
    return questions;
}

了解更多信息

于 2012-11-17T13:02:27.313 回答
2

我怀疑您的收藏(即“getQuestions”)没有很好地注释。
如果您打算拥有一个 Question 对象或扩展 Question 的对象列表(例如,
如果您有 StudentQuestion 和 LecturerQuestion 扩展 Question 并且您希望将这些对象添加到集合中),您应该考虑使用 XmlRefElement 如果
您想要将“问题”的“包装器”放在“问题”上,即 - 具有如下所示的 XML:

<Questions>
   <Question></Question>
   <Question></Questions>
</Question>

您应该使用注释集合@XmlElementWrapper(name="Questions")

于 2012-11-17T12:56:17.843 回答