固定长度XSD映射POJO时末尾字段被设为null,如何修改为空值?
解决方案
你当前使用的是固定长度文件解析框架(大概率为BeanIO),按以下步骤修改即可实现需求:
- 给可选字段添加空字符串默认值
在minOccurs="0"的字段上新增default=""属性,当字段对应位置无有效内容时,框架会自动返回空字符串而非null。同时在record标签新增allowMissingFields="true"属性,兼容记录长度不足的场景(比如第一条记录只有7位),避免框架抛出缺失字段异常,同时触发默认值填充逻辑。
修改后的XSD配置如下:
<record name="xyz" class="POJO" allowMissingFields="true"> <field name="name" type="string" position="0" length="4" required="false"/> <field name="state" type="string" position="4" length="2" required="true"/> <field name="enrolled" position="6" type="byte" length="1" required="true"/> <field name="label1" type="string" position="7" length="1" minOccurs="0" default=""/> <field name="label2" type="string" position="8" length="1" minOccurs="0" default=""/> <field name="label3" type="string" position="9" length="1" minOccurs="0" default=""/> </record>
- 全局配置(可选)
如果有大量字段需要统一默认空字符串,可以直接在根<stream>标签上配置default="",所有字段会继承该默认值,不用逐个字段添加。 - 兜底方案:自定义类型转换器
如果所用框架不支持默认值配置,可以自定义String类型的转换器,逻辑为:当解析到的原始值为null时,直接返回空字符串,再将该转换器注册为全局String类型的解析器即可。
修改后即可得到你期望的映射结果,所有缺值字段(包括尾部缺失、中间空白的字段)都会统一返回空字符串。
内容的提问来源于stack exchange,提问作者ammy
相关产品推荐
相关产品推荐

