XStreamと注釈を使用して、Java オブジェクトと XML の間を行き来しています。私は本質的に XML を可能な限り最小限にしようとしていますが、削減したい項目の 1 つは、boolean
必要のないときに値を含めることです。boolean
値がの場合、false
デフォルト値も false であるため、xml に含めたくありません。
デフォルト値と等しい場合に値を含めないように 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;