[英]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();
}
}
如果這不起作用,你可能會使用@XmlJavaTypeAdaptor
和XmlAdaptor<Foo, YourAdaptedFoo>
,但這真的很討厭 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.