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
コメント
この記事へのトラックバックはありません。













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