Integer to int using jaxb
我有一个奇怪的情况,类中的 getter 返回原始 int 类型,而 setter 采用 Integer 类。
当 jaxb 将元素解组到此类时,它找不到它正在寻找的 setter:
1 2 3 4 5 6 7 8 9 10 11 | public class Foo { int bar; public int getBar() { return this.bar; } public void setBar(Integer bar) { this.bar = bar.intValue(); } } |
我已尝试添加:
1 |
到getter(和setter),改变模式中字段的类型,但这没有帮助。
在解组期间我收到此错误:该属性有一个 getter "public int com.example.getBar()" 但没有 setter。对于解组,请定义 setter。
我无法修改类,例如,我无法将 bar 更改为 Integer 或添加原始类型的新 setter,但我可以添加注释。
从手机发帖,请多多包涵!
正如您可能知道的那样,该属性与 javabeans 规范不匹配,所以这就是问题所在。您能否使用新名称添加一个新的 setter/getter 对,它们都使用 Integer,并将 XML 标记放在该新属性上?新方法只会委托给现有方法。 HTH
您可以通过将 JAXB 配置为使用字段访问来解决此问题。这是通过
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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); } } |
更多信息
- http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html
很遗憾你不能引入任何额外的方法。如果你可以添加一个额外的私有方法,你可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
如果这不起作用,你可能会卡住使用