你的模特照原样为我工作。请参见下面的示例:
演示
package forum13350129;
import java.util.*;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Quiz.class);
Question question1 = new Question();
List<Answer> answers1 = new ArrayList();
answers1.add(new Answer());
answers1.add(new Answer());
question1.setAnswers(answers1);
Question question2 = new Question();
List<Answer> answers2 = new ArrayList();
answers2.add(new Answer());
answers2.add(new Answer());
question2.setAnswers(answers2);
Quiz quiz = new Quiz();
quiz.getQuestions().add(question1);
quiz.getQuestions().add(question2);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(quiz, System.out);
}
}
输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<quiz>
<questions>
<answers/>
<answers/>
</questions>
<questions>
<answers/>
<answers/>
</questions>
</quiz>
更新#1
如果您像我一样尝试将它作为 JSON 格式获取呢?
这取决于。JSON 绑定不是JAXB (JSR-222)规范的一部分。这意味着您的环境正在执行以下操作之一:
- 将 JAXB impl 与 Jettison 之类的库一起使用来生成 JSON(请参阅: http ://blog.bdoughan.com/2011/04/jaxb-and-json-via-jettison.html )
- 使用 JSON 绑定库(例如有一些 JAXB 注释支持的 Jackson)
- 使用提供 JSON 绑定的 JAXB impl,例如 EclipseLink MOXy(请参阅: http ://blog.bdoughan.com/2011/08/json-binding-with-eclipselink-moxy.html )。
使用EclipseLink JAXB (MOXy)如下:
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
marshaller.marshal(quiz, System.out);
将产生以下 JSON:
{
"quiz" : {
"questions" : [ {
"answers" : [ {
}, {
} ]
}, {
"answers" : [ {
}, {
} ]
} ]
}
}
更新#2
我已经解决了延迟加载关系的问题。我在存储库中使用 Hibernate.initialize。我正在尝试从我拥有的资源中返回这个测验对象。我正在使用 JAX-RS。
我看到人们在将 Hibernate 模型编组为 XML 时遇到问题。我相信这个问题是由于 Hibernate 使用的代理对象造成的。在下面的链接中,我建议使用 anXmlAdapter
在代理对象和真实对象之间进行转换,这很有帮助。