Spring BootでJava ObjectをCSVにしてダウンロードする方法




CSV化

インストール

ダウンロードするファイルを作るためにまずはObjectをCSVに変換します。ライブラリはjackson-dataformat-csvを使うのが簡単で楽です。gradleでのインストールは下記になります。

dependencies {
	compile('com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.9.4')
}

使い方

CsvMapperからインスタンスを作成し、csvにしたいクラスを使ってschemaを定義します。csvにヘッダーをつけたい場合はwithHeader()をつけます。あとはwriteValueAsStringにクラスのインスタンス配列を渡すだけです。

Kotlinで書いているので適宜読み替えてください。

val mapper = CsvMapper()
val schema = mapper.schemaFor(SampleDTO::class.java).withHeader()
val csv = mapper.writer(schema).writeValueAsString(sampleDtoList)

ダウンロード

ダウンロード処理も簡単です。レスポンスにはResponseEntity<ByteArray>を使っています。上記で作成したcsvをByteArrayに変換することでファイルとしてクライアントに返却できます。

HttpHeadersのsetContentDispositionFormDataを使うことでファイル名を設定できます。文字コードはByteArray変換時に(Charset.forName(“SJIS”)を指定するとエクセルでも文字化けしないファイルを返すことができます。

@GetMapping("/csv")
fun downloadCsv(@ModelAttribute request: CsvRequest): ResponseEntity<ByteArray> {

    val header: HttpHeaders = HttpHeaders()
    // ファイル名を指定
    header.setContentDispositionFormData("filename", "sample.csv");
    // 文字コードをSJISに変更
    return ResponseEntity<ByteArray>(csv.toByteArray(Charset.forName("SJIS")), header, HttpStatus.OK);
}

おすすめ書籍

Springの概要からインストール方法、各コア機能(Security, Sessionなど)の解説が体系的にまとめられています。2018年に出版されたばかりなので情報も新しいです。これからSpring Bootでアプリケーション開発をしたい方の最初に読む一冊としておすすめします。対象は初心者だけでなく上級者まで幅広く学べるので是非読んでみてください!

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です