我打算使用CXF的其余实现。我想用jaxb注释(例如@XmlRootElement
)简单地注释我的实体类,以便创建响应对象。好处是避免代码重复。对于将由单独的Web应用程序使用的(客户端)请求对象,我正在考虑“复制”实体类,删除orm注释以及添加jaxb注释。
基于以上所述:
@XmlRootElement
注释它们,我怎样才能阻止关系属性被添加(或被视为除外)到响应对象?答案 0 :(得分:1)
您可以毫无困难地组合多个注释。例如,您可以:
@Column
@XmlElement
private String name;
因此,您可以为所有目的重用相同的类,而无需复制它。
您提到的项目 - hyperjaxb3 - 就是这样 - 它根据模式生成JAXB和JPA注释。
答案 1 :(得分:0)
@javax.xml.bind.annotation.XmlTransient
将从模式中删除一个字段(JAXB将忽略它)。您还可以使用@javax.xml.bind.annotation.XmlAccessorType
Per @ bohzo的答案,你甚至不需要复制你的实体。但是如果你不这样做,你可能会将你的实体类耦合到XML,这意味着每当你重构你的实体时你必须更新所有客户端(因为生成的模式会有所不同!)在我看来,XML模式是响应/请求对象应该与任何实体分开设计,以便它们能够更好地服务于它们的目的。这使得将来可以重构实体并专注于他们的目的。
答案 2 :(得分:0)
是否存在创造的危险 来自实体的请求/响应对象 类?
您的请求/响应对象需要能够映射到XML。使用标准JAXB API将JPA实体映射到XML有一些难点:
EclipseLink JAXB (MOXy)具有将JPA实体映射到XML的特定扩展:
我的实体类包含关系 属性,如果我要注释它们 使用@XmlRootElement,我该如何停止 来自的关系属性 添加(或考虑分开)到 回应对象?
您可以使用JAXB @XmlTransient批注来防止字段转换为/ fom XML。
是否有更好/更简单的创作方式 请求对象而不是复制 实体类,删除/添加 注释
我会建议您直接使用您的实体。有关示例,请参阅: