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

标签 java xstream

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

相关文章:

java - XStream:如何在自定义转换器中编码/解码列表?

java - 用于基于 Java 的 SOAP Web 服务的 PHP SOAP XML 格式

java - 在 Android 上解码 h264 字节流

java - getCameraIdList() 函数返回一个空数组

java - 如何摆脱 xstream 输出中的外部类引用?

java - 无法使用 Android 中的 xstream 库序列化包含 ArrayList 的 java 对象

java - 使用定义名称的 XStream 存储 List<String>

java - JSON:拒绝来自第三方的服务器请求

java - 舍入前可以检测到 "java.lang.ArithmeticException: Rounding necessary"吗?

java - Xstream 或 Jaxb 架构支持