Jakarta ee JAX-RS从实体到xml的自定义映射
我的问题是: 假设我有两个用JAX-RS注释的实体:Jakarta ee JAX-RS从实体到xml的自定义映射,jakarta-ee,annotations,rest,jax-rs,Jakarta Ee,Annotations,Rest,Jax Rs,我的问题是: 假设我有两个用JAX-RS注释的实体: @XmlRootElement @Entity public Person { private String firstname; private String lastname; private Address address; } @XmlType @Entity public Address { private String street; private String city; } 这将被渲染为: <
@XmlRootElement
@Entity
public Person {
private String firstname;
private String lastname;
private Address address;
}
@XmlType
@Entity
public Address {
private String street;
private String city;
}
这将被渲染为:
<person>
<firstname></firstname>
<lastname></lastname>
<address>
<street></street>
<city></city>
</address>
</person>
因此,我的问题是:
是否可以对这些实体进行注释,以便返回的xml为:
<person>
<firstname></firstname>
<lastname></lastname>
<street></street>
<city></city>
</person>
i、 e.地址实体的属性被视为个人属性(没有随附的标签)?我不完全确定您为什么要这样做,但这可能有效(未测试) 我个人会在这一点上使用DTO模式。混合使用ORM和序列化注释很少是一件好事。您可以使用。MOXy包含一个名为@XmlPath的注释,用于进行基于XPath的映射。自我XPath(“.”)将为您提供所需的效果:
@Entity
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlRootElement
public Person {
private String firstname;
private String lastname;
private Address address;
// getter and setter for firstname/lastname
@XmlPath(".")
public Address getAddress() { return address; }
public String getStreet() { return getAddress().getStreet(); }
// more getters and setters
}
有关使用EclipseLink JAXB扩展的示例,请参见:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
顺便说一句,MOXy还有许多用于处理JPA实体的扩展:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory