본문 바로가기
프로그래밍/코프링

코프링, 코틀린 데이터 클래스와 FlatFileParseException 해결

by K-인사이터 2024. 3. 7.
반응형

안녕하세요 

K-IN 입니다. 

 

FlatFileItemReader 이란? 

CSV 파일을 리소스 폴더에 두고 읽어오기 위해 필요한 클래스입니다. 

이 클래스를 통해서 Dto 와 같이 데이터 클래스를 초기화할 수 있습니다. 

 

예를들어 직원 정보가 담긴 CSV 파일을 읽어와 작업하는 경우에 많이 쓰이겠습니다. 

 

코틀린과 FlatFileParseException

코틀린에서는 data 키워드를 통해서 Dto 클래스를 선언하면 편리합니다. 

어떤 점에서 편리한지 궁금하시다면 아래의 글을 추천드립니다. 

2024.03.07 - [프로그래밍/코틀린] - 코틀린, data 키워드와 데이터 클래스

 

코틀린, data 키워드와 데이터 클래스

안녕하세요 K-IN 입니다. 코틀린에 대해서 알아보겠습니다. 전체 강의 목록은 아래의 링크를 클릭해주세요. 2024.01.31 - [코틀린] - K000. 코틀린 시리즈 (연재물) K000. 코틀린 시리즈 (연재물) 안녕하

k-in.tistory.com

 

다시 돌아와 코틀린으로 FlatFileItemReader 클래스를 통해 데이터 클래스를 초기화하는 코딩을 할 때 하나의 팁이 필요합니다. 

 

data 키워드로 데이터 클래스를 선언하고 이를 FlatFileItemReader 클래스에서 사용할 때,
기본값(default value)를 반드시 제공해야 함

 

 

다시 말해 아래 예시처럼 코딩하면 g.springframework.batch.item.file.FlatFileParseException: Parsing error at line: 1 in resource=[class path resource [sample-data.csv]], input=[Jill,Doe] 와 같은 에러가 발생합니다. 

package com.kin.batchexample

data class Person(
	var firstName: String,
	var lastName: String
) {
}


@Bean
fun reader(): FlatFileItemReader<Person> {
    return FlatFileItemReaderBuilder<Person>()
        .name("personItemReader")
        .resource(ClassPathResource("sample-data.csv"))
        .delimited()
        .names("firstName", "lastName")
        .targetType(Person::class.java)
        .build()
}

 

이는 FlatFileItemReader 클래스가 Person 객체를 초기화하는 방식과 관련이 있습니다. 

즉, 우선 객체를 생성하고 firstName 속성과 lastName 속성을 초기화하는 것을 의미합니다. 

 

따라서, Person 데이터 클래스는 기본값을 지정하지 않으므로 CSV 파일을 파싱하는 과정에서 에러가 발생함을 말합니다. 

이와 같은 에러를 방지하기 위해서는 코틀린 문법에 따라 기본값(default value)을 제공해야합니다.

package com.kin.batchexample

data class Person(var firstName: String = "", var lastName: String = "") {
}

 

이번에 발생한 g.springframework.batch.item.file.FlatFileParseException: Parsing error at line: 1 in resource=[class path resource 에러는 처음이라면 잡기가 어렵습니다. 파일을 파싱하는 과정에서 발생한 에러이고 데이터 클래스가 원인이라고 말해주지 않기 때문입니다. 

 

이글을 통해서 여러분의 시간을 절약하길 바랍니다. 

 

이상입니다.

K-IN 올림. 

반응형