JavaのライブラリjacksonでCSVを出力する方法
jackson-dataformat-csvライブラリを使用してCSVやTSVを出力することができます。
Jackson | バージョン |
---|---|
Jackson Dataformat CSV | 2.10.0 |
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からテストしてみます。
ブラウザから実行するとb.csvファイルがダウンロードされます。
ファイルは以下のようにname,idの順です。
name,id takahashi,1 higashiguchi,2
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント