簡體   English   中英

使用jaxb整數到int

[英]Integer to int using jaxb

我有一個奇怪的情況,一個類中的getter返回一個原始的int類型,而setter采用一個Integer類。

當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。

我無法修改類,因為我無法將條形圖更改為整數或添加具有基本類型的新setter,但我可以添加注釋。

從手機上發帖所以請耐心等待! 該屬性與javabeans規范不匹配,因此您可能知道這是問題所在。 您是否可以使用新名稱添加新的setter / getter對,它們都使用Integer,並將XML標記放在該新屬性上? 新方法只會委托現有方法。 HTH

您可以通過將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);
    }

}

欲獲得更多信息

很遺憾你不能引入任何額外的方法。 如果您可以添加額外的私有方法,則可以執行以下操作:

@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();
    }
}

如果這不起作用,你可能會使用@XmlJavaTypeAdaptorXmlAdaptor<Foo, YourAdaptedFoo> ,但這真的很討厭

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM