ここでトリックを使用できます。動作を変更する要素のコンバーターを作成します。
HowToRenderEmptyTag
クラス:
@Root(name = "howToRenderEmptyTag")
public class HowToRenderEmptyTag
{
@Element(name = "emptyString", required = false)
@Convert(value = EmptyElementConverter.class) // Set the converter for this element
private String nullString;
// ...
}
EmptyElementConverter
クラス:
public class EmptyElementConverter implements Converter<String>
{
@Override
public String read(InputNode node) throws Exception
{
/* Implement if required */
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void write(OutputNode node, String value) throws Exception
{
/* Simple implementation: do nothing here ;-) */
}
}
文字列に対してこれを実装する必要はありませんConverter
。この例ではオプションです。クラスをジェネリックのままにしておくか、それを実装してObject
、要素の王様に使用できるようにすることができます。
例:
final File f = new File("test.xml");
HowToRenderEmptyTag example = new HowToRenderEmptyTag("");
Serializer ser = new Persister(new AnnotationStrategy()); // Don't forget AnnotationStrategy here!
ser.write(example, f);
そして最後に結果:
<howToRenderEmptyTag>
<emptyString/>
</howToRenderEmptyTag>
両方を使用したので、空の要素にemptyStringまたはnullStringという名前が必要かどうかはわかりませんが、それを変更することは大したことではありません:-)