gpt4 book ai didi

java - JAXB 和 Jersey 列表解析?

转载 作者:行者123 更新时间:2023-12-04 06:58:47 25 4
gpt4 key购买 nike

我定义了以下 XSD 来生成一些 jaxb 对象。它运作良好。

<xsd:element name="Person" type="Person" />

<xsd:complexType name="Person">
<xsd:sequence>
<xsd:element name="Id" type="xsd:int" />
<xsd:element name="firstName" type="xsd:string" />
<xsd:element name="lastName" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>

<xsd:element name="People">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" minOccurs="0" maxOccurs="unbounded"
type="Person" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

我使用 Spring RowMapper 将数据库中的行映射到 Person 对象。所以,我最终
带有 List 对象,即 不是 一个 People 对象。我的 People 对象在内部有一个 List

然后在我的 Jersey 资源类中,我有:
@GET
@Path("/TheListOfPeople")
public List<Person> getListOfPeople() {
List<Person> list = dao.getList();
return list;
}

返回的 XML 是:
<?xml version="1.0" encoding="UTF-8" standalone="yes" >
<people>
<Person>...</Person>
<Person>...</Person>
<Person>...</Person>
<Person>...</Person>
</people>

我的问题是它是如何在 XML 中从 List 映射到 People 的。此外,该元素是“人”(大写 P)而不是“人”(小写 P)。似乎它根本没有真正使用 XSD。

编辑 这在某种程度上与这个问题有关: JAXB Collections (List<T>) Use Pascal Case instead of Camel Case for Element Names

最佳答案

Seems like it's not really using the XSD at all



那是因为它没有。 JAXB 仅在使用 XJC 生成代码时使用模式;之后它就没有用了,在运行时它只使用注释(它也可以用于验证,但这与此处无关)。

您的 REST 方法返回 List<Person> ,而 Jersey 正在尽最大努力将其转换为 XML,将其包装在 <people> 中。 .你还没有告诉它使用 People包装类,它无法自己猜测。

如果要生成 <People>包装元素,那么你需要给它 People包装类:
@GET
@Path("/TheListOfPeople")
public People getListOfPeople() {
People people = new People();
people.getPerson().addAll(dao.getList()); // or something like it

return people ;
}

关于java - JAXB 和 Jersey 列表解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2204729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com