有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用jaxb将java整数转换为int

我遇到了一个奇怪的情况,类中的getter返回一个原始int类型,setter接受一个整数类

当jaxb将一个元素解组到此类时,它找不到正在查找的setter:

public class Foo {
    int bar;

    public int getBar() {
        return this.bar;
    }

    public void setBar(Integer bar) {
        this.bar = bar.intValue();
    }
}

我尝试补充:

@XmlElement ( type = java.lang.Integer.class, name = "bar" ) 

对于getter(和setter),更改模式中字段的类型,但这没有帮助

在解组过程中,我遇到以下错误:该属性有一个getter“public int com.example.getBar()”,但没有setter。对于解组,请定义setter

我不能修改该类,如中所示,我不能将bar更改为整数或添加具有基元类型的新setter,但我可以添加注释


共 (3) 个答案

  1. # 1 楼答案

    从电话发帖,请容忍我! 该属性与javabeans规范不匹配,所以这就是问题所在,您可能知道。您可以使用一个新名称添加一个新的setter/getter对吗?该名称都使用Integer,并将XML标记放在新属性上?新方法只会委托给现有方法。嗯

  2. # 2 楼答案

    你不能引进任何额外的方法真是太遗憾了。如果您可以添加一个额外的private方法,您可以这样做:

    @XmlAccessorType(XmlAccessType.NONE)
    public class Foo {
        int bar;
    
        public int getBar() {
            return this.bar;
        }
    
        @XmlElement
        private Integer getBar() {
            return this.bar;
        }
    
        public void setBar(Integer bar) {
            this.bar = bar.intValue();
        }
    }
    

    如果这不起作用,您可能会被困在使用^{}^{}中,但这真的很糟糕

  3. # 3 楼答案

    您可以通过将JAXB配置为使用字段访问来解决此问题。这是通过@XmlAccessorType注释完成的:

    package forum8334195;
    
    import javax.xml.bind.Unmarshaller;
    import javax.xml.bind.annotation.*;
    
    @XmlRootElement
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Foo {
        int bar;
    
        public int getBar() {
            return this.bar;
        }
    
        public void setBar(Integer bar) {
            this.bar = bar.intValue();
        }
    
        /**
         * Put logic to update domain object based on bar field here.  This method
         * will be called after the Foo object has been built from XML.
         */
        private void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {
             System.out.println(bar);
        }
    
    }
    

    了解更多信息