gpt4 book ai didi

java - 是否可以将 XSream 配置为在值等于默认值时不包含这些值?

转载 作者:行者123 更新时间:2023-12-01 15:03:33 27 4
gpt4 key购买 nike

我正在使用XStreamAnnotations在我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com