Chapter 28

Controller(csvダウンロード)

kazpgm
kazpgm
2022.01.05に更新

自動作成されたControllerを説明する。

例:商品情報管理("/members/admin/shohin/shohin")

controller.admin.ShohinController.java

商品情報csvダウンロード(mode=csv)

    //=======================================================
    // csvダウンロード
    //=======================================================
    /**
     * csv形式でダウンロードする
     * 補足:CsvMapperクラスを使う方法にしている。
     *       文字コードはデフォルトUTF-8 からShift_JISに変更した。
     *        ①「response.setContentType(MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE + ";charset=Shift_JIS");」としたが、
     *         UTF-8のままShift_JISにならなかったので、
     *         「produces = MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE + "; charset=Shift_JIS;"」にした。
     *        ②producesに「produces = MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=Shift_JIS; Content-Disposition: attachment; filename=\"shohin.csv\"")」
     *         としたが、ファイル名が”shohin.csv”にならなかった。ので
     *         「response.setHeader("Content-Disposition", "attachment; filename=\"shohin.csv\"");」にした。
     */

・「管理者用csv出力」をクリックすると、JavaScriptのsubmitFrm5関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=csv★csv-01により、shohinCsvメソッドにマッピングされます。shohinCsvメソッドは商品情報一覧CSVを出力します。★csv-02
・入力チェックは行わない。Form入力はない。もちろんDB更新もない。
・文字コードはデフォルトUTF-8 からShift_JISに変更するので、「produces = MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE + "; charset=Shift_JIS;"」にした。

     @PostMapping(params="mode=csv",
            produces = MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE + "; charset=Shift_JIS;")
    @ResponseBody
    public Object shohinCsv(HttpServletResponse response) throws JsonProcessingException {

・Functions.editSortItemNameOrderメソッド(SortItemNameとSortOrderの内容をチェック、編集する)を実行し、ソート項目が存在しないときや、ソート順がAでもDでもないとき、デフォルト値を設定する。
・パラメータの意味
 ・this.sessionShohinSrchOrderForm.getSrchOrderForm():セッションスコープ・商品情報タイトル行ソート順Form
 ・sortItemNames:ソート項目の項目名(Entityの項目名。テーブル項目名ではない)

        //SortItemNameとSortOrderの内容をチェック、編集する
        Functions.editSortItemNameOrder(this.sessionShohinSrchOrderForm.getSrchOrderForm(), sortItemNames);
        //文字コードと出力するCSVファイル名を設定
        response.setHeader("Content-Disposition", "attachment; filename=\"shohin.csv\"");

・editSqlメソッド(SortItemNameとSortOrderの内容をチェック、編集する)をパラメータ”select”で実行し、レコード検索SQLを作成する。
・getArgsListメソッド(SQL文用変数リスト作成)をパラメータshohinSrchForm(商品情報検索条件Form)で実行し、SQL文用変数リストを作成する。
・shohinService.getFindsShohinメソッド(商品情報を、条件及び、ページング情報により検索する)を実行し、ShohinのListオブジェクトを作成する。
・パラメータの意味
 ・selectSql:レコード検索SQL
 ・argsList:SQL文用変数リスト

        //検索
        String selectSql = editSql("select");
        List<Object> argsList = getArgsList(this.sessionShohinSrchForm.getShohinSrchForm());
        List<Shohin> shohinList = shohinService.getFindsShohin(selectSql, argsList);

・検索結果・商品情報Entityリスト(shohinList)からshohinCsv(CsvMapperクラスを使用してCSV出力するため)のリストを作成する。その時、DBエレメント(業種、大分類、中分類、小分類)のEntityオブジェクト(BiztypeCdObj、CategoryCdObj、SubcategoryCdObj、ExtracategoryCdObj)から名称を取得する。

        //CSVデータに入れる
        List<ShohinCsv> shohinCsvList = new ArrayList<ShohinCsv>();
        for (Shohin shohin : shohinList) {
            ShohinCsv shohincsv = new ShohinCsv();
            //同一プロパティ(型名まで同じもの)コピー
            BeanUtils.copyProperties(shohin, shohincsv);
            //コピー先の型が違うものをコピー
            if (!ObjectUtils.isEmpty(shohin.getBiztypeCdObj())) {
                shohincsv.setBiztypeCdName(shohin.getBiztypeCdObj().getBizname());
            }
            if (!ObjectUtils.isEmpty(shohin.getCategoryCdObj())) {
                shohincsv.setCategoryCdName(shohin.getCategoryCdObj().getCatname());
            }
            
            if (!ObjectUtils.isEmpty(shohin.getSubcategoryCdObj())) {
                shohincsv.setSubcategoryCdName(shohin.getSubcategoryCdObj().getSubcatname());
            }
            if (!ObjectUtils.isEmpty(shohin.getExtracategoryCdObj())) {
                shohincsv.setExtracategoryCdName(shohin.getExtracategoryCdObj().getExcatname());
            }
            shohincsv.setOpenkbn1Name(shohin.getOpenkbn1Name());
            //リストに追加する
            shohinCsvList.add(shohincsv);
        } 

・■CsvMapperクラスを使い、shohinCsvListからCSVを出力する。

        CsvMapper mapper = new CsvMapper();
        //すべての項目をダブルクォーテーションで囲む
        mapper.configure(Feature.ALWAYS_QUOTE_STRINGS, true);
        //Date型の編集フォーマットを指定する
        mapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"));
        CsvSchema schema = mapper.schemaFor(ShohinCsv.class).withHeader();
        return mapper.writer(schema).writeValueAsString(shohinCsvList);
    }