字段之前和getter声明之前使用@XmlElement有什么区别?
我可以用两种方式声明JAXB元素:
@XmlElement public int x;
要么
private int x; @XmlElement public int getX(){...}
无论如何,第一个变体AFAIK创建了映射到XML的getter。 这两种方式有什么区别?
它与@XmlAccessorType
注释有关。
-
XmlAccessType.PROPERTY
:只有在某些JAXB注释明确注释字段时,才将字段绑定到XML。 -
XmlAccessType.FIELD
:Getter / setter对只有在被某些JAXB注释显式注释时才绑定到XML
根据评论更新解释:
让我们考虑一个看起来像这样的简单xml:
someValue
我们有一节课:
@XmlRootElement(name = "root") //@XmlAccessorType(XmlAccessType.PROPERTY) @XmlAccessorType(XmlAccessType.FIELD) public class DemoRoot { @XmlElement private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
如果您尝试使用XmlAccessType.FIELD
和字段上方的@XmlElement
注释解组,那么您将解组很好。
如果您使用XmlAccessType.PROPERTY
您将收到以下错误:
IllegalAnnotationsException:IllegalAnnotationExceptions类的1个计数具有两个同名“value”的属性
这是因为它考虑了使用@XmlElement
字段’value’显式注释和getter / setter。
如果你在getter / setter上移动@XmlElement
注释,反之亦然。