java - 将 @XmlRootElement 添加到每个 JAXB bean 是否有任何问题?

标签 java jaxb jersey moxy

在我当前的项目中,我们使用 JAXB beans 进行 Hibernate 并通过 [REST API][1] 以 XML 和 JSON 格式发送数据。我们希望能够在用作 REST VO 的 Result 对象中任意包含任何 JAXB bean(例如,作为 <xsd:any> 元素),而无需为可能包含的每种不同类型提供单独的编码方法。似乎最简单的方法是在每个 bean 上使用 @XmlRootElement 注释。

  1. 这是“无缝”编码的好方法吗?
  2. 这样做会产生后果吗?

我们使用 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/

相关文章:

java - 如何在 android 中使用 asmack 4.0.5 获取最后一次查看

java - 使用 JNI 从 native 方法返回 null

java - 如何让 Jersey/Jackson 序列化空列表;单个元素列表作为数组

带有 Jersey 和 Tomcat 的 Java Web 服务。 ¿如何在 Web 服务停止时停止所有线程?

java - JAXB 是否提供 XMLBeanscompileXsd 的替代方案?

java - Jersey - 尽管非空初始化,资源变量仍为空值

java - AWS RDS 到 AWS ES

Tomcat Web 应用程序中的 java TCP 服务器

java - 如何配置 Spring 的 RestTemplate 在返回 404 的 HTTP 状态时返回 null

java - 通过转换将 XML 流式传输到 JAXB Unmarshaller,并为根元素声明类类型