我正在使用XStream与 Annotations在我的 Java 对象和 XML 之间切换。我本质上是在尝试使 XML 尽可能少,而我想要减少的项目之一是在不必要时包含 boolean
值。当 boolean
值为 false
时,我不想将其包含在我的 xml 中,因为它的默认值也是 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;
最佳答案
我最近遇到了同样的问题,发现避免 XStream 实例化 boolean 值默认值的最简单方法是使 boolean 值成为 java.lang.Booleans 而不是原始 boolean 值。
因此,只需像这样定义您的属性就可以解决问题:
@XStreamAlias("good")
@XStreamAsAttribute
private Boolean good;
关于java - 是否可以将 XSream 配置为在值等于默认值时不包含这些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13293913/