【问题标题】:FlatFileParseException Parsing error - Spring BatchFlatFileParseException 解析错误 - Spring Batch
【发布时间】:2016-02-16 15:05:18
【问题描述】:

我关注了这个tutorial,我收到了FlatFileParseException 错误:

org.springframework.batch.item.file.FlatFileParseException:解析 行错误:1 in resource=[class path resource [country.csv]], 输入=[AA,阿鲁巴]

country.csv

AA,Aruba
BB,Baruba

这是我的ItemReader 方法

@Bean
    public ItemReader<Country> reader() {
        FlatFileItemReader<Country> reader = new FlatFileItemReader<Country>();
        reader.setResource(new ClassPathResource("country.csv"));
        reader.setLineMapper(new DefaultLineMapper<Country>() {{
            setLineTokenizer(new DelimitedLineTokenizer() {{
                setNames(new String[] { "countryCode", "countryName" });
            }});
            setFieldSetMapper(new BeanWrapperFieldSetMapper<Country>() {{
                setTargetType(Country.class);
            }});
        }});
        return reader;
    }

Country.java

@Entity
@Table(name="Country")
public class Country  {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false, updatable = false)
    Long id;

    @Column(name = "countryCode", nullable = false, updatable = false)
    String countryCode;

    @Column(name = "countryName", nullable = false, updatable = false)
    String countryName;

    public Country(String countryCode, String countryName) {
        this.countryCode = countryCode;
        this.countryName = countryName;

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCountryCode() {
        return countryCode;
    }

    public void setCountryCode(String countryCode) {
        this.countryCode = countryCode;
    }

    public String getCountryName() {
        return countryName;
    }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }

    @Override
    public String toString() {
        return "countryCode: " + countryCode + ", countryName: " + countryName;
    }
}

【问题讨论】:

  • 请发布完整的堆栈跟踪;但我将从 Country 的 empty-ctor 和 countryName 的 setter 开始

标签: java spring spring-boot spring-batch


【解决方案1】:

这里的问题是您在 Country 类中缺少默认的无参数构造函数。

您正在使用BeanWrapperFieldSetMapperFieldSet 映射到对象。引用setTargetType(type) Javadoc:

每次调用mapFieldSet(FieldSet)时,都会从其默认构造函数中创建一个这种类型的对象。

因此,您需要添加一个默认构造函数并为属性提供相应的getter / setter。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多