JAXB(JSR-222)是例外配置,这意味着存在默认映射应用于域对象。 这意味着有时您需要显式排除字段/属性。 在本文中,我将讨论如何使用@XmlTransient或@XmlAccessorType(XmlAccessType.NONE)以及何时使用每个选项。
@XmlTransient
当使用@XmlTransient标记字段/属性时,您明确地告诉您的JAXB实现将其视为未映射的属性。 当少于一半的字段/属性未映射时,这很有用。
package blog.unmapped;import java.util.List;
import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {@XmlTransientprivate int id;private String firstName;private String lastName;private Address billingAddress;private Address shippingAddress;private List<PhoneNumber> phoneNumbers;}
如果未映射一半以上的字段/属性,则由于异常,我们将停止获得配置的好处,因为与映射映射的属性相比,我们需要做更多的工作以使用@XmlTransient排除属性。 接下来,我将演示如何在此用例中利用@XmlAccessorType(XmlAccessType.NONE)。
package blog.unmapped;import java.util.List;
import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {@XmlTransientprivate int id;private String firstName;private String lastName;@XmlTransientprivate Address billingAddress;@XmlTransientprivate Address shippingAddress;@XmlTransientprivate List<PhoneNumber> phoneNumbers;}
@XmlAccessorType(XmlAccessType.NONE)
通过设置@XmlAccessorType(XmlAccessType.NONE),我们将通过例外禁用配置。 现在,将仅映射显式映射的属性。 当少于一半的域对象的字段/属性被映射时,这很有用。
package blog.unmapped;import java.util.List;
import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {@XmlTransientprivate int id;private String firstName;private String lastName;@XmlTransientprivate Address billingAddress;@XmlTransientprivate Address shippingAddress;@XmlTransientprivate List<PhoneNumber> phoneNumbers;}
进一步阅读
如果您喜欢这篇文章,那么您还喜欢:
- 使用JAXB的@XmlAccessorType配置字段或属性访问
- 使用@XmlTransient忽略继承
Java XML和JSON绑定博客中的JCG合作伙伴 Blaise Doughan的参考: JAXB和未映射的属性 。
翻译自: https://www.javacodegeeks.com/2012/04/jaxb-and-unmapped-properties.html