SpringでSuperCSVを使ってファイルを出力するとunable to find getter for fieldというエラーがでる。

こんにちは。

ITエンジニアの鈴木尚です。

Springを使ったシステムでCSVファイルを出力する機能はよくありますが、今回、SuperCSVというライブラリを使って実装していてちょっとハマったので、備忘録として残しておきます。

【現象】

modelから受け取ったデータ(userList)をCSVに出力したくて、以下のようなコードを書いて実行したら、エラーになりました。

// 出力するデータを受け取る。
List<User> userList = (List<User>) model.get("userList");
ICsvBeanWriter csvWriter = new CsvBeanWriter(response.getWriter()
    , CsvPreference.STANDARD_PREFERENCE);

// 出力する項目を設定
String[] Header= {"ユーザID","ユーザ有効期限","パスワード有効期限" };

// Listの内容を出力
for (User user : userList) {
     csvWriter.write(user, Header);
}
csvWriter.close();

コンソールに出力されたエラー

org.springframework.web.util.NestedServletException: Request processing failed; 
   nested exception is org.supercsv.exception.SuperCsvReflectionException: 
     unable to find getter for field user_id1 in class com.hoge.hoge 
       - check that the corresponding nameMapping element matches 
         the field name in the bean context=null

 

【原因】

出力項目の指定方法が間違っていました。

どうやら、Headerに設定する項目は、Modelで定義した項目と一致していないといけないようです。

こんな感じ↓

String[] Header= {"user_id","user_due_date","pass_update" };

importしたモデル↓

public class User {
    private String user_id; // ユーザーID
    private Date user_due_date; // ユーザ有効期限
    private String password; // パスワード
    private Date pass_update; // パスワード有効期限
    private int login_miss_times; // ログイン失敗回数
    private boolean lock_flg; // ロック状態
    private boolean enabled_flg; // 有効フラグ
    private String insert_user; // 作成者
    private Timestamp insert_date; // 作成日時
    private String update_user; // 更新者
    private Timestamp update_date; // 更新日時
}

 

【結果】

エラーは解消され、ヘッダーとして”user_id”,”user_due_date”,”pass_update” が出力されました。

確かに、ちゃんと定義したとおりに項目名を指定しないと、どれを出力していいかわかりませんからね。当然といえば当然です。。。

 

【環境】

Spring Boot 2.3.4
Spring Framework 5.2.4
PostgreSQL 13.0
SuperCSV 2.2

 

 

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

ピックアップ記事

2018.1.17

Kindle版「プロジェクトマネジメント一日一言」プロジェクトの人間学

こんにちは。鈴木尚です。 このサイトで毎日投稿している「プロジェクトの人間学」ですが、このたび、1年分の記事を整理/改修してKindleに…

おすすめ記事

ページ上部へ戻る