2

我正在编组一个可以将某些字段设置为空的对象。我正在使用带有 xml 映射文件的 castor 进行配置。我正在编组的课程是这样的:

class Entity {
    private int id;
    private String name;
    private String description; // THIS CAN BE NULL
    /* ... getters and setters follow ... */
}

...和这样的映射文件:

<mapping>
    <class name="Entity">
        <field name="id" type="integer"/>
        <field name="name" type="string"/>
        <field name="description" type="string"/>
    </class>
</mapping>

如果该字段为空(简化示例),我现在得到什么:

<entity>
   <id>123</id>
   <name>Some Name</name>
</entity>

虽然我想在生成的 XML 中有一个空标签,即使描述字段为空。

<entity>
   <id>123</id>
   <name>Some Name</name>
   <description /> <!-- open/close tags would be ok -->
</entity>
4

1 回答 1

2

一种方法是使用 GeneralizedFieldHandler。这有点小技巧,但它适用于其他字符串字段。

例子:

<mapping>
    <class name="Entity">
        <field name="id" type="integer"/>
        <field name="name" type="string"/>
        <field name="description" type="string" handler="NullHandler"/>
    </class>
</mapping>


public class NullHandler extends GeneralizedFieldHandler {

    @Override
    public Object convertUponGet( Object arg0 )
    {
        if( arg0 == null )
        {
            return "";
        }

        return arg0;
    }

    @Override
    public Object convertUponSet( Object arg0 )
    {
        return arg0;
    }

    @Override
    public Class getFieldType()
    {
        return String.class;
    }

}
于 2012-02-08T19:58:12.003 回答