JAXB 可以有效地用于将结构转储到 XML 中,只需很少的注释。 JAXB 的妙处在于不需要创建一些 DTO 或用样板代码过多地扰乱编码类。
但经常会发生提供数据的方法不是 getter,而是类似 formatDescription() 甚至 toString() 的方法。
如果它只是一个类,这无关紧要,因为它可以通过添加 getDescription() 进行子类化。 但是,当利用 MOXy 的功能来编码接口(interface)时,这变得更难了——必须将方法添加到接口(interface)并且更改所有实现;或接口(interface)的子类化和所有 impls。
// @XmlElement(name = "desc") // DOESN'T WORK.
String toDescription();
// JAXB needs getter :/
@XmlElement(name = "desc")
String getDescription();
有没有办法让 MOXy 接受不以 get*
开头的方法?
最佳答案
我发现 MOXy allows external metadata in XML files (而不是注释)。 也在 Jaxb EclipseLink/MOXy : Is it possible to specify the names of get/set methods 中描述.
所以在这种情况下,我会设置
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="forum8834871">
<java-types>
<java-type name="ServerInfo" xml-accessor-type="PUBLIC_MEMBER">
<xml-root-element/>
<java-attributes>
<xml-element name="desc" java-attribute="description" >
<xml-access-methods get-method="toDescription"/>
</xml-element>
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
未经测试,如果我省略 set-method
可能无法正常工作。
无论如何 - 这只是一种解决方法,所以我 filled a feature request .
关于java - (如何)我可以让 JAXB (MOXy) 接受非 setter/getter 进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16971799/