在我当前的项目中,我们使用 JAXB beans 进行 Hibernate 并通过 [REST API][1] 以 XML 和 JSON 格式发送数据。我们希望能够在用作 REST VO 的 Result 对象中任意包含任何 JAXB bean(例如,作为 <xsd:any>
元素),而无需为可能包含的每种不同类型提供单独的编码方法。似乎最简单的方法是在每个 bean 上使用 @XmlRootElement 注释。
- 这是“无缝”编码的好方法吗?
- 这样做会产生后果吗?
我们使用 Java 1.6、用于 jaxb 的 EclipseLink/MOXy、用于 REST 的 Jersey 1.x 以及 Tomcat 应用服务器。我们的 bean 是通过 xjc 从 XML 模式文件生成的,并使用 annox在生成时添加注释。
[1]:在理想的情况下,数据对象将与域对象分开,但这是一个小团队的小项目,因此数据库和 api 之间的隔离是没有必要的
最佳答案
Are there any concerns with adding @XmlRootElement to every JAXB bean?
没有。
<小时/>We want to be able to arbitrarily include any JAXB bean inside a Result
通用Result
带有 @XmlAnyElement(lax=true)
注释的字段/属性的对象是创建通用消息的好方法,其中任意负载对象用 @XmlRootElement
注释。可以使用。
we use as a REST VO (e.g. as an element) without having a separate marshalling method for each different type that could be included.
我担心的是,您返回的数据不会像您想要的那样。 SOAP 具有信封消息格式,其中数据位于主体中。一般REST没有这个。当我访问 RESTful 端点时,我通常不期望某种封装数据的信封。
关于java - 将 @XmlRootElement 添加到每个 JAXB bean 是否有任何问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21032441/