Jackson 라이브러리를 사용하면 자바 객체에 담긴 내용을 Json 뿐만 아니라 CSV(Comma-Separated Values)로도 전환 할 수 있습니다. CSV는 엑셀로 파일을 바로 열어보려는 요구에서 주로 사용 되는데 자바 객체에 담긴 내용을 CSV로 전환하고 파일로 저장하는 방법을 알아 보고자 합니다.
pom.xml
jackson-databind, jackson-dataformat-csv를 추가한다.
그러나 jackson-databind에는 jackson-core, jackson-annotation 의존성이 있어, jackson-databind 만 있어도 된다.
자바 객체에서 CSV 파일 생성
CSV 형식은 데이터베이스 테이블처럼 열(Column)과 행(Row)으로 표현된다. 자바 객체를 리스트로(java.util.List)로 전달하면, 데이터를 담고 있는 변수로 컬럼을 구성하고 리스트로 들어오는 데이터를 행 단위로 써 내려가는 식이다.
Java Object(VO)
변수 위에 @JsonProperty("제목")으로 CSV Header에 해당하는 컬럼명을 별도 지정할 수 있다. @JsonPropertyOrder로 컬럼의 순서도 바꿀 수 있다. @Getter @Setter도 달아준다.
CsvMapper, CsvSchema
JSON에서 ObjectMapper를 사용한 것 처럼, CSV는 CsvMapper를 사용한다. CsvSchema로 원하는 형식을 잡아준다.
파일 생성
파일을 준비하고 ObjectWriter로 리스트 데이터로 파일을 작성한다.
CsvMapper에서 바로 파일로 내려쓰는 방법도 있지만, OutputStreamWriter에서 인코딩(MS949)을 설정하여야 UTF-8로 저장해 둔 한글을 엑셀에서 정상적으로 볼 수 있다.
`.writeAll(responseVoList)` 스키마에 넘겼던 객체의 리스트 인스턴스를 넘겨주면 끝이지만, 파일이 아닌 문자열로 받고 싶다면, JSON처럼 writeValueAsString을 쓸 수도 있다
`csvMapper.writer(csvSchema).writeValueAsString(responseDtoList);`
적용
글. SIGN팀 | 류대석
-
PREV 신시웨이, 서울시 일·생활균형 우수기업(여성 맞춤형) 표창
2020-11-16 -
NEXT 암호화 패딩(Padding) & Base64 Encoding
2020-12-07