我正在尝试使用 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 = ""
)
请注意,creditCardAcc
和 companyId + sublevelId
在文件中保持相同的位置。根据用例,我们要么设置creditCardAcc
字段,要么companyId
并sublevelId
.现在对于我的用例,我想设置creditCardAcc
,但问题是companyId
和sublevelId
都填充了空格并覆盖了creditCardAcc
字段,即使它们设置为null
。
一种解决方案是将这些字段拉入扩展KeySegment
的两个子类,并改为元组子类。但是,我想知道是否有更好的本机解决方案可以用来实现这一目标。例如,如果字段为空,有没有办法禁用填充?
谢谢。
当字段null
时,无法禁用填充。padding
属性在此处具有以下说明
如果启用了填充,则必填字段属性具有一些控制权 在空值的编组和取消编组上。
取消编组由固定长度的所有空格组成的字段时 流,如果需要为 false,则接受该字段,无论 填充字符。如果为"必需",则为必填字段验证 触发错误。封送空字段值时,如果 必需为 false,字段文本的格式为空格,而不考虑 配置的填充字符。
引用的最后一句正是您要问的。