Java Spring批处理中平面文件中存在空格问题
我正在使用Spring批处理框架解析一个固定长度的平面文件,使用Java Spring批处理中平面文件中存在空格问题,java,spring-batch,Java,Spring Batch,我正在使用Spring批处理框架解析一个固定长度的平面文件,使用FlatFileItemReader和lineMapper作为DefaultLineMapper和fieldSetMapper作为PassThroughFieldSetMapper和lineTokenizer作为模式匹配复合索引器 但由于文件中的值可能有空格,因此我在处理过程中遇到了一些问题字段集在删除任何前导或尾随空格后为我提供值。我希望这些值带有空格(如果有),以便进行验证 我不熟悉Spring批处理框架。有人能告诉我如何解决这
FlatFileItemReader
和lineMapper作为DefaultLineMapper
和fieldSetMapper作为PassThroughFieldSetMapper和lineTokenizer作为模式匹配复合索引器
但由于文件中的值可能有空格,因此我在处理过程中遇到了一些问题字段集在删除任何前导或尾随空格后为我提供值。我希望这些值带有空格(如果有),以便进行验证
我不熟悉Spring批处理框架。有人能告诉我如何解决这个问题吗?我知道很久以前就有人问过这个问题,但是如果有人会遇到同样的问题: 问题在于FieldSet类,因为当您调用
FieldSet.readString()
时,它将调用readAndTrim()
方法并返回修剪过的字符串。
要保留空白字符串,您应该调用
fieldSet.readRawString()
我还想回答这个问题:
您可以创建自己的FieldMapper
实现,并将其自动连接到lineMapper.setFieldSetMapper()
@组件
类CustomFieldSetMapper实现FieldSetMapper{
@凌驾
公共伙伴关系映射字段集(字段集字段集)引发BindException{
回归新伙伴关系(
partnerCrmId:fieldSet.readString('partnerCrmId'),
partnerType:fieldSet.readString('partnerType'),
customerCrmId:fieldSet.readString('customerCrmId'),
startDate:fieldSet.readString('startDate'),
endDate:fieldSet.readString('endDate'),
clientId:fieldSet.readRawString('clientId'),
状态:fieldSet.readString('status'),
类型:fieldSet.readString('type'),
providerCode:fieldSet.readString('providerCode'),
lastModifiedDate:fieldSet.readString('lastModifiedDate')
)
}
}
您能否共享文件中的一行示例,其中也显示了拆分字符。我认为Spring已经有了这样的功能:org.springframework.batch.item.file.transform.FixedLengthTokenizer它还不够好吗?您有这样的示例吗?
@Component
class CustomFieldSetMapper implements FieldSetMapper<Partnership>{
@Override
public Partnership mapFieldSet(FieldSet fieldSet) throws BindException {
return new Partnership(
partnerCrmId:fieldSet.readString('partnerCrmId'),
partnerType: fieldSet.readString('partnerType'),
customerCrmId: fieldSet.readString('customerCrmId'),
startDate: fieldSet.readString('startDate'),
endDate: fieldSet.readString('endDate'),
clientId: fieldSet.readRawString('clientId'),
status: fieldSet.readString('status'),
type: fieldSet.readString('type'),
providerCode: fieldSet.readString('providerCode'),
lastModifiedDate: fieldSet.readString('lastModifiedDate')
)
}
}