自動作成されたControllerを説明する。
例:商品情報管理("/members/admin/shohin/shohin")
controller.admin.ShohinController.java
商品情報csvアップロード初期表示(mode=up_csv)
//=======================================================
// csvアップロード
//=======================================================
/**
* shohinUpCsvメソッド
* 商品情報テーブルアップロード画面表示
* 商品情報テーブルアップロード画面を表示する
*
* @return "/members/admin/shohin/shohinUpCsv"
*/
・サイドメニューの商品情報アップロードをクリックすると、JavaScriptのsubmitFrm5関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=up_csv★up_csv-01により、shohinUpCsvメソッドにマッピングされます。shohinUpCsvメソッドは商品情報 初期データアップロード画面を初期表示します。★up_csv-02
@PostMapping(params="mode=up_csv")
public String shohinUpCsv() {
・遷移先として、/resources/templates/members/admin/shohin/shohinUpCsv.html(商品情報 初期データアップロード画面)をテンプレートファイルとする。
return "/members/admin/shohin/shohinUpCsv";
}
商品情報csvアップロード処理(mode=up_csv_do)
/**
* shohinUpCsvDoメソッド
* csvファイルをアップロードし、商品情報テーブルに登録する処理
* アップロードは管理者向けなので、CsvUtils.readにおいて、CsvMapperクラスでパーズし、
* shohinService.registerにおいて、@Validで項目チェックを行っている。
* 補足:アップロードする、csvファイルはShift_JISであること。
*
* @param file csvファイルアップロード
* @param mode モード
* @param model モデル
* @return "/members/admin/shohin/shohinUpCsv"
* @throws Exception
*/
・登録ボタンを押下すると、JavaScriptの:document.frm.submit()関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=up_csv_doにより、shohinUpCsvDoメソッドにマッピングされます。shohinUpCsvDoメソッドは商品情報CSVをDBに登録します。★up_csv_do-01
・商品情報CSVファイルはfileにセットされる。
@PostMapping(params="mode=up_csv_do")
public String shohinUpCsvDo(@RequestParam("file") MultipartFile file,
・リクエストパラメータmodeを受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
@RequestParam("mode") String mode,
Model model) throws Exception {
List<ShohinUpload> shohinList;
try {
・CsvUtils.readSjisメソッド(画面から、CSVファイル(SJIS文字コード)を読み込んでテーブル登録用データリスト作成する。)を実行し、shohinListを作成する。
・パラメータの意味
・ShohinUpload.class:商品CSVアップロード用クラス
・file.getInputStream():CSVファイル読み込みstream
shohinList =CsvUtils.readSjis(ShohinUpload.class, file.getInputStream()); //Shift_JISならこれを使う
・処理可能な例外をキャッチしたら、"errorMessage"をmodelアトリビュートに設定し、遷移先として、/resources/templates/members/admin/shohin/shohinUpCsv.html(商品情報csvアップロード画面)をテンプレートファイルとする。
} catch(CsvMappingException e) {
model.addAttribute("errorMessage", "CSVファイルのタイトル行(1行目)と2行目以降の項目数を合わせてください。 メッセージ=" + e.getMessage());
return "/members/admin/shohin/shohinUpCsv";
} catch (UnrecognizedPropertyException e){
model.addAttribute("errorMessage", "CSVファイルのタイトル行(1行目)はEntityの項目名(テーブル項目名ではない)にしてください。 メッセージ=" + e.getMessage());
return "/members/admin/shohin/shohinUpCsv";
} catch(InvalidFormatException e) {
model.addAttribute("errorMessage", "CSVファイルに変換できない文字が含まれています。 メッセージ=" + e.getMessage());
return "/members/admin/shohin/shohinUpCsv";
} catch(Exception e) {
・処理可能でない例外をキャッチしたら、ログを書いて例外を投げる。画面はシステム共通例外発生画面になる。「システム共通例外発生画面」シート参照
・補足:Throwable.Errorは、ここでキャッチせずに、システム共通例外発生画面で処理している。
e.printStackTrace();
log.error("エラーが発生しました", e);
throw e;
}
try {
・shohinService.registerForShohinUpCsvDoメソッドで、csvデータ値のチェックを行い、DB・商品情報テーブルにshohinListを挿入する。
shohinService.registerForShohinUpCsvDo(shohinList);
・処理可能な例外(csvデータ値のチェック結果として、単項目チェックエラーまたは、複合項目チェックエラー)をキャッチしたら、"errorMessageList"をmodelアトリビュートに設定し、遷移先として、/resources/templates/members/admin/shohin/shohinUpCsv.html(商品情報csvアップロード画面)をテンプレートファイルとする。
//単項目チェックエラー(『shohinService.register(@Valid List<ShohinUpload> shohinList)』の@Validが出したエラー)
} catch(ConstraintViolationException e) {
List<String> list = Functions.createErrorMessage(e.getConstraintViolations());
model.addAttribute("errorMessageList", list);
return "/members/admin/shohin/shohinUpCsv";
//複合項目チェックエラー(自力チックで出したエラー)
} catch(UploadComplexValidException e) {
List<String> MsgList = Functions.getErrorMsgList(e.getHashMap());
model.addAttribute("errorMessageList", MsgList);
return "/members/admin/shohin/shohinUpCsv";
//その他の更新時エラー
} catch(Exception e) {
・DB例外発生時はshohinServiceでrollbackされている。例外をキャッチしたら、ログを書いて例外を投げる。画面はシステム共通例外発生画面になる。「システム共通例外発生画面」シート参照
・補足:Throwable.Errorは、ここでキャッチせずに、システム共通例外発生画面で処理している。
e.printStackTrace();
log.error("DBエラーが発生しました", e);
throw e;
}
・"successMessage"=”商品情報登録が完了しました”をmodelアトリビュートに設定し、遷移先として、/resources/templates/members/admin/shohin/shohinUpCsv.html(商品情報csvアップロード画面)をテンプレートファイルとする。
model.addAttribute("successMessage", "商品情報登録が完了しました");
return "/members/admin/shohin/shohinUpCsv";
}