use*_*298 25 java boolean jaxb
得到一个简短的问题.有谁知道如何让JAXB(marshall)将布尔字段渲染为1和0而不是打印出"true"和"false"?
mtp*_*typ 40
适配器类:
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class BooleanAdapter extends XmlAdapter<Integer, Boolean>
{
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
@XmlElement( name = "enabled" )
@XmlJavaTypeAdapter( BooleanAdapter.class )
public Boolean getEnabled()
{
return enabled;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
遇到与user20298相同的问题,我遵循了mtpettyp的提示,并根据我的配置进行了调整.
我的配置是: - maven来构建项目. - maven中的"org.jvnet.jaxb2.maven2"插件. - jaxb 2.2.6 - 在这个场合,我正在为kml 2.2制作Java类(ogckml22.xsd)
当谷歌地图希望它们为"1/0"时,我偶然发现了布尔值被渲染为"真/假"的问题.
这是maven中的插件配置:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<generateDirectory>src/main/generated</generateDirectory>
<extension>true</extension>
<removeOldOutput>true</removeOldOutput>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我在src/main/resources文件夹中添加了一个jaxb-bindings.xjb文件,其中包含以下内容:
<?xml version="1.0" ?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
version="2.1"
xmlns:kml="http://www.opengis.net/kml/2.2"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<globalBindings>
<xjc:simple/>
<xjc:javaType name="java.lang.Boolean"
xmlType="xsd:boolean"
adapter="path.to.my.JaxbBooleanAdapter"/>
</globalBindings>
...
...
</bindings>
Run Code Online (Sandbox Code Playgroud)
适配器类如下:
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<String, Boolean>
{
@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";
}
}
Run Code Online (Sandbox Code Playgroud)
JAXB提供了一种灵活的方式来自定义绑定.您只需编写一个XML文件,该文件将指示您希望如何绑定XML和Java类型.在您的情况下,您可以使用<javaType>声明,您可以在其中指定a parseMethod和a printMethod.这些方法可以很简单
public boolean myParseBool(String s)
{
return s.equals("1");
}
public String myPrintBool(boolean b)
{
return b ? "1" : "0";
}
Run Code Online (Sandbox Code Playgroud)
可能存在更简单的方法,可能使用DatatypeConverter,但我不太了解这个主题可以帮助你更多!
| 归档时间: |
|
| 查看次数: |
15665 次 |
| 最近记录: |