我正在使用带有注释的XStream在我的 Java 对象和 XML 之间进行传输。我本质上是在尝试使 XML 尽可能小,我想要减少的项目之一是在不需要时包含值。当一个值是我不想将它包含在我的 xml 中时,因为它的默认值也是 false。boolean
boolean
false
是否可以将 XSream 配置为不包含等于默认值的值?
鉴于:
public class Test {
@XStreamAlias("name")
@XStreamAsAttribute
private String name;
@XStreamAlias("good")
@XStreamAsAttribute
private boolean good;
public Test(String name, boolean good){
this.name = name;
this.good = good;
}
public static void main(String[] args) {
XStream stream = new XStream();
stream.processAnnotations(new Class[] {Test.class});
Test test1 = new Test("Test", true);
System.out.println(stream.toXML(test1));
Test test2 = new Test("Test", false);
System.out.println(stream.toXML(test2));
}
}
这打印:
<Test name="Test" good="true"/>
<Test name="Test" good="false"/>
我希望它是:
<Test name="Test" good="true"/>
<Test name="Test"/>
编辑:
我注意到 BooleanConverter 有一个名为的方法shouldConvert
,所以我尝试通过扩展类来覆盖它。哪个不起作用,它永远不会被调用。方法:
@Override
public boolean shouldConvert(Class type, Object value) {
System.out.println("Class: "+type+" Value: "+value);
return (Boolean)value;
}
我的变量注释来设置转换器good
@XStreamConverter(MyBooleanConverter.class)
@XStreamAlias("good")
@XStreamAsAttribute
private boolean good;