首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字段之前使用@XmlElement与在getter声明之前使用@XmlElement有什么区别?

问在字段之前使用@XmlElement与在getter声明之前使用@XmlElement有什么区别?
EN

Stack Overflow用户
提问于 2018-02-20 15:06:54
回答 2查看 5.1K关注 0票数 2

我可以通过两种方式声明JAXB元素:

代码语言:javascript
复制
@XmlElement
public int x;

或

代码语言:javascript
复制
private int x;

@XmlElement
public int getX(){...}

第一个变体,AFAIK,创建getter,映射到XML。这两种方式有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-20 15:13:10

它与@XmlAccessorType注释有关。

  • XmlAccessType.PROPERTY:字段只有在被一些JAXB注释显式注释时才绑定到XML。
  • XmlAccessType.FIELD:Getter/setter对只有在被一些JAXB注释显式注释时才绑定到XML。

根据评论更新解释:

让我们考虑一个简单的xml,如下所示:

代码语言:javascript
复制
<root>
    <value>someValue</value>
</root>

我们有一堂课:

代码语言:javascript
复制
@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注释,反之亦然。

票数 10
EN

Stack Overflow用户

发布于 2019-03-16 12:52:43

@XMLElement (和类似的注释)在字段之前或getter之前的用法在本文中解释得很清楚:http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html。

类确定字段/getter的XML绑定之前的以下注释:

  • @XmlAccessorType(XmlAccessType.PUBLIC_MEMBER):公共字段、带注释的字段和属性
  • @XmlAccessorType(XmlAccessType.PROPERTY):带注释的字段和属性
  • @XmlAccessorType(XmlAccessType.FIELD):字段和注释的属性
  • @XmlAccessorType(XmlAccessType.NONE):带注释的字段和带注释的属性
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48888250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档