如何告诉castor将空字段编组为空标记



我正在编组一个可以将某个字段设置为null的对象。我使用castor和一个xml映射文件进行配置。我正在编组的班级是这样的:

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中有一个空标记,即使描述字段为null。

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

实现这一点的一种方法是使用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;
    }
}

相关内容

  • 没有找到相关文章