我可以通过两种方式声明JAXB元素:
@XmlElement
public int x;或
private int x;
@XmlElement
public int getX(){...}第一个变体,AFAIK,创建getter,映射到XML。这两种方式有什么区别?
发布于 2018-02-20 15:13:10
它与@XmlAccessorType注释有关。
XmlAccessType.PROPERTY:字段只有在被一些JAXB注释显式注释时才绑定到XML。XmlAccessType.FIELD:Getter/setter对只有在被一些JAXB注释显式注释时才绑定到XML。根据评论更新解释:
让我们考虑一个简单的xml,如下所示:
<root>
<value>someValue</value>
</root>我们有一堂课:
@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: 1 IllegalAnnotationExceptions类的计数具有两个同名为“值”的属性
这是因为它同时考虑了显式注释的@XmlElement字段'value‘和getter/setter。
如果在getter/setter上移动@XmlElement注释,反之亦然。
发布于 2019-03-16 12:52:43
@XMLElement (和类似的注释)在字段之前或getter之前的用法在本文中解释得很清楚:http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html。
类确定字段/getter的XML绑定之前的以下注释:
https://stackoverflow.com/questions/48888250
复制相似问题