JavaのライブラリjacksonでCSVを出力する方法

JavaのライブラリjacksonでCSVを出力する方法

jackson-dataformat-csvライブラリを使用してCSVやTSVを出力することができます。

Jackson バージョン
Jackson Dataformat CSV 2.10.0

Jackson Dataformat CSV

CSVを表すクラスを作成します。@JsonPropertyOrder、@JsonPropertyで指定している順序が出力順序になります。

name,idの順に出力するようになります。

package jp.co.jacksoncsv;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@JsonPropertyOrder({"name", "id"})
public class Csv {
  @JsonProperty("id")
  private String id;
  @JsonProperty("name")
  private String name;
}

CsvMapperクラス、CsvSchemaクラスを使用します。value = "*.csv"とすることで、最後に.csvとなればREST APIが呼び出されます。ファイル名も*.csvとなります。(例えばhttp://example.com/a.csv)

package jp.co.confrage.jacksoncontroller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;

@RestController
public class JacksonController {
  @RequestMapping(value = "*.csv",
  produces = MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8; Content-Disposition: attachment")
  public Object downloadCsv() throws IOException {
    CsvMapper mapper = new CsvMapper();
    CsvSchema schema = mapper.schemaFor(Csv.class).withHeader();

    List<Csv> csv = new ArrayList<Csv>();
    Csv csv1 = new Csv("1", "takahashi");
    Csv csv2 = new Csv("2", "higashiguchi");
    csv.add(csv1);
    csv.add(csv2);
    return mapper.writer(schema).writeValueAsString(csv);
  }
}

ARCからテストしてみます。

JavaのライブラリjacksonでCSVを出力する方法

ブラウザから実行するとb.csvファイルがダウンロードされます。

ファイルは以下のようにname,idの順です。

name,id
takahashi,1
higashiguchi,2

コメント

タイトルとURLをコピーしました