You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Batch FlatFileItemReader读取CSV空值转0配置求助

解决Spring Batch FlatFileItemReader读取CSV空值映射为Int类型的问题

这个问题核心是FieldSet.readInt(String name)方法遇到空字符串时,会直接尝试强制转换为整数,从而抛出NumberFormatException。要实现空列映射为0的需求,有几种简单直接的解决方案:

方案一:使用readInt重载方法指定默认值

这是最便捷的处理方式,FieldSet提供了带默认值的readInt重载方法:readInt(String name, int defaultValue),当目标字段为空或不存在时,会自动返回你指定的默认值(这里设为0)。

修改你的InfoFileMapper类代码如下:

public class InfoFileMapper implements FieldSetMapper<InfoDTO> {
    @Override
    public InfoDTO mapFieldSet(FieldSet fieldSet) throws BindException {
        if(fieldSet == null){
            return null;
        }
        return new InfoDTO(
            fieldSet.readString("CUSTR_NBR"),
            fieldSet.readString("SUR_NAME"),
            fieldSet.readString("CHECK_FLAG"),
            // 为空时返回默认值0
            fieldSet.readInt("RESN_CODE", 0),
            // 为空时返回默认值0
            fieldSet.readInt("EMPNO", 0)
        );
    }
}

方案二:手动判断空值并转换(适配复杂场景)

如果需要对空值做更精细的判断逻辑(比如区分空字符串和空白字符),可以先读取字符串再手动转换:

import org.springframework.util.StringUtils;

public class InfoFileMapper implements FieldSetMapper<InfoDTO> {
    @Override
    public InfoDTO mapFieldSet(FieldSet fieldSet) throws BindException {
        if(fieldSet == null){
            return null;
        }
        
        // 处理RESN_CODE字段
        String resnCodeStr = fieldSet.readString("RESN_CODE");
        int resnCode = StringUtils.hasText(resnCodeStr) ? Integer.parseInt(resnCodeStr) : 0;
        
        // 处理EMPNO字段
        String empnoStr = fieldSet.readString("EMPNO");
        int empno = StringUtils.hasText(empnoStr) ? Integer.parseInt(empnoStr) : 0;
        
        return new InfoDTO(
            fieldSet.readString("CUSTR_NBR"),
            fieldSet.readString("SUR_NAME"),
            fieldSet.readString("CHECK_FLAG"),
            resnCode,
            empno
        );
    }
}

补充说明

  • 你的DelimitedLineTokenizer配置是正常的,它会正确将CSV中的空列解析为空字符串,不需要额外调整。
  • 如果你有大量Int类型字段需要统一处理默认值,可以封装一个通用的字段转换工具类,避免重复代码。

内容的提问来源于stack exchange,提问作者Book

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:04:46