0

我正在尝试使用 BeanIO 库编写一个固定宽度的文件。这是有问题的记录:

@Record
open class KeySegment(
    @Field(at = 0, length = 1, required = true) var recordType: String = "",
    @Field(at = 1, length = 6, required = true) var primaryCorpId: String = "",
    @Field(at = 7, length = 16, minOccurs = 0) var creditCardAcc: String? = null,
    @Field(at = 7, length = 8, minOccurs = 0) var companyId: String? = null,
    @Field(at = 15, length = 8, minOccurs = 0) var sublevelId: String? = null,
    @Field(at = 23, length = 8, required = true) var fileCreateDate: String = "",
    @Field(at = 31, length = 8) var sourceId: String = "",
    @Field(at = 39, length = 816) var filler: String = ""
)

请注意,creditCardAcccompanyId + sublevelId在文件中保持相同的位置。根据用例,我们可以设置creditCardAccfield 或companyIdand sublevelId。现在对于我的用例,我想设置creditCardAcc,但问题是companyIdandsublevelId用空格填充并覆盖creditCardAcc字段,即使它们设置为null

一种解决方案是将这些字段拉入两个扩展的子类KeySegment中,并改为编组子类。但是,我想知道是否有更好的本机解决方案可以用来完成此任务。例如,如果字段为空,有没有办法禁用填充?

谢谢。

4

1 回答 1

1

当字段为 时,无法禁用填充null。该padding属性在此处有如下描述

如果启用了填充,则必需的字段属性可以对空值的编组和解组进行一些控制。

当解组由固定长度流中的所有空格组成的字段时,如果 required 为 false,则无论填充字符如何,都接受该字段。如果 required 为真,则会触发必填字段验证错误。并且在编组空字段值时,如果 required 为 false,则无论配置的填充字符如何,字段文本都被格式化为空格。

引用的最后一句话正是您要问的。

于 2019-07-24T22:44:52.307 回答