如何让JAXB将boolean渲染为0和1,而不是true和false

得到一个简短的问题。 有谁知道如何让JAXB(marshall)将布尔字段呈现为1和0而不是打印出“true”和“false”?

适配器类:

import javax.xml.bind.annotation.adapters.XmlAdapter; public class BooleanAdapter extends XmlAdapter { @Override public Boolean unmarshal( Integer s ) { return s == null ? null : s == 1; } @Override public Integer marshal( Boolean c ) { return c == null ? null : c ? 1 : 0; } } 

用法:

 @XmlElement( name = "enabled" ) @XmlJavaTypeAdapter( BooleanAdapter.class ) public Boolean getEnabled() { return enabled; } 

JAXB提供了一种灵活的方式来自定义绑定 。 您只需编写一个XML文件,该文件将指示您希望如何绑定XML和Java类型。 在您的情况下,您可以使用声明,您可以在其中指定parseMethodprintMethod 。 这些方法可以很简单

 public boolean myParseBool(String s) { return s.equals("1"); } public String myPrintBool(boolean b) { return b ? "1" : "0"; } 

可能存在更简单的方法,可能使用DatatypeConverter,但我不太了解这个主题可以帮助你更多!

遇到与user20298相同的问题,我按照mtpettyp的提示进行了调整,并根据我的配置进行了调整。

我的配置是: – maven来构建项目。 – maven中的“org.jvnet.jaxb2.maven2”插件。 – jaxb 2.2.6 – 在这个场合,我正在为kml 2.2制作Java类(ogckml22.xsd)

当谷歌地图希望它们成为’1/0’时,我偶然发现了布尔值被渲染为’真/假’的问题

这是maven中的插件配置:

  org.jvnet.jaxb2.maven2 maven-jaxb2-plugin   generate-sources  generate     src/main/generated true true  

我在src / main / resources文件夹中添加了一个jaxb-bindings.xjb文件,其中包含以下内容:

        ... ...  

适配器类如下:

 package path.to.my; import javax.xml.bind.annotation.adapters.XmlAdapter; /** * Utility class to correctly render the xml types used in JAXB. */ public class JaxbBooleanAdapter extends XmlAdapter { @Override public Boolean unmarshal(String v) throws Exception { if ("1".equals(v)) { return true; } return false; } @Override public String marshal(Boolean v) throws Exception { if (v == null) { return null; } if (v) { return "1"; } return "0"; } } 

我可能会创建一个类型适配器,用于将布尔值转换为int。 JAXB用户指南中有一些示例 。

您可以编写一对解析器/编写器,并在绑定JAXB XML中定义属性映射。