CSVダウンロード機能
検索結果などをCSV形式のファイルとしてダウンロードする機能を作成する。
1. コントローラクラス
- 以下の例ではformに検索条件が格納されており、 paintService.findByCondition(form)で 検索結果がList<PaintDetailDto>形式で取得されるものとする。
例)コントローラクラスのメソッド例
・・・略
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
・・・略
@PostMapping(path = "/paint/search", params = {"csv"})
@ResponseBody
public ResponseEntity<byte[]> downloadCsv(
PaintSearchForm form,
Model model) throws JsonProcessingException, UnsupportedEncodingException {
List<PaintDetailDto> list = paintService.findByCondition(form);
CsvMapper mapper = new CsvMapper();
// Header有り
CsvSchema schema = mapper.schemaFor(PaintDetailDto.class).withHeader();
// CSVに変換し、さらにMS932のバイト配列に変換
byte[] data =
mapper.writer(schema).writeValueAsString(list).getBytes("MS932");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDisposition(ContentDisposition.attachment()
.filename("しーえすぶい.csv", StandardCharsets.UTF_8).build());
return new ResponseEntity<>(data, headers, HttpStatus.OK) ;
}
- 上記PaintDetailDtoは以下の通りで、CsvMapperによりCSV形式に変換している。
package com.ziqoo.demo.service.paint.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
@JsonPropertyOrder({"色コード", "色名称", "数量", "商品名"})
@Data
public class PaintDetailDto {
@JsonProperty("色コード")
private String colorCd;
@JsonProperty("色名称")
private String colorName;
@JsonProperty("数量")
private Integer quantity;
@JsonProperty("商品名")
private String productName;
}
- CsvMapperを使用するにはbuild.gradleのdependencies {}に以下を追加する。
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv';
2. 実行結果
- 実行結果は以下の様なCSVファイルがダウンロードされる。
色コード,色名称,数量,商品名 XF-53,ニュートラルグレイ,0,タミヤカラーアクリル X-1,ブラック,0,タミヤカラーエナメル XF-1,フラットブラック,0,タミヤカラーエナメル AS-7,ニュートラルグレイ,0,タミヤカラースプレー TS-8,イタリアンレッド,0,タミヤカラースプレー

