質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.81%

Cloud FunctionsでRequestにセットした配列の値が取得できない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 633

kouji-t

score 10

Cloud Functions でのRequestの値の取得方法を、教えて頂けないでしょうか。

前提・実現したいこと

Requestで送信したパラメータから、配列でセットされたデータを取得したい。
よろしくお願い致します。

開発環境
送信側 Java Idea
Cloud側 Javascript  Cloud Function 

発生している問題・エラーメッセージ

配列の外の値は取得できて、データストアに登録できている。

配列でセットしたパラメータを、For文で取得処理を行っているが値が取れない。
エラーはキャッチされていない。

試したこと

値をセットした配列の datas をログで表示したが

models.dto.functions.GoodPricesDetailDto@96b7b12


と表示されるだけで、内容が表示されない。

値を設定しているJava

            //配列用の変数を定義
            List<GoodPricesDetailDto> goodsPriceDteailDtoList = new ArrayList<GoodPricesDetailDto>();


            int no = 1;
            for (GoodsPriceItemForm goodsPriceItemForm : goodsPriceForm.getPriceItems()) {

                if (!StringUtils.isEmpty(goodsPriceItemForm.getPriceItemName())) {

                    com.eaio.uuid.UUID priceItemId = new com.eaio.uuid.UUID();

                    MGoodsPriceDetails mGoodsPriceDetails = new MGoodsPriceDetails();
                    mGoodsPriceDetails.setPriceDetailId(priceItemId.toString());

                    mGoodsPriceDetails.setGoodsId(goodsPriceForm.getGoodsId());

                    mGoodsPriceDetails.setPriceItemName(goodsPriceItemForm.getPriceItemName());
                    mGoodsPriceDetails.setOrderNo(goodsPriceItemForm.getOrderNo());
                    mGoodsPriceDetails.setPriceTypeId(goodsPriceItemForm.getPriceTypeId());
                    mGoodsPriceDetails.setUnitPrice(Double.parseDouble(goodsPriceItemForm.getUnitPrice()));
                    mGoodsPriceDetails.setOrderNo(no);
                    mGoodsPriceDetails.save();

//ここから 配列をセットしている
                    //Cloud Function の準備 
                    GoodPricesDetailDto goodPricesDetailDto = new GoodPricesDetailDto();
                    goodPricesDetailDto.setGoodsId(mGoodsPriceDetails.getGoodsId().toString());
                    goodPricesDetailDto.setActionType(actionTypeFlg);
                    goodPricesDetailDto.setOrderNo(mGoodsPriceDetails.getOrderNo().toString());
                    goodPricesDetailDto.setPriceTypeId(mGoodsPriceDetails.getPriceDetailId());
                    goodPricesDetailDto.setPriceItemName(mGoodsPriceDetails.getPriceItemName());
                    goodPricesDetailDto.setUnitPrice(String.valueOf(mGoodsPriceDetails.getUnitPrice()));
                    //goodPricesDetailDto.setCreatedAd(DateUtils.toString(mGoodsPriceDetails.getCreatedAt(), Const.DB_DATE_FULL_FORMAT));
                    goodPricesDetailDto.setCreatedAd(mGoodsPriceDetails.getCreatedAt().toString());

                    goodsPriceDteailDtoList.add(goodPricesDetailDto);
//ここまで
                }
                no++;
            }


            // Cloud Functionへ
            GoodsPriceDto goodsPriceDto = new GoodsPriceDto();

            goodsPriceDto.setGoodsId(goodsPriceForm.getGoodsId().toString());
            goodsPriceDto.setManagementsFree(String.valueOf(mGoodsPrices.getManagementFee()));
            goodsPriceDto.setActionType(actionTypeFlg);
            goodsPriceDto.setUserId(userId.toString());
            goodsPriceDto.setPrice(String.valueOf(mGoodsPrices.getPrice()));
            goodsPriceDto.setPaidPayment(String.valueOf(mGoodsPrices.getPaidPayment()));
            goodsPriceDto.setManagementsFree(String.valueOf(mGoodsPrices.getManagementFee()));
            goodsPriceDto.setCreatedAd(mGoodsPrices.getCreatedAt().toString());

//値をセットした配列を代入する
            goodsPriceDto.setDatas(goodsPriceDteailDtoList);

            String firebaseUrl = ConfigFactory.load().getString("url");

            Map map = BeanUtils.describe(goodsPriceDto);

            ClientCloudFunctions cloudFunctions = new ClientCloudFunctions();
            cloudFunctions.execute(firebaseUrl, map);

            Ebean.commitTransaction();
        } catch (Exception e) {
            Ebean.rollbackTransaction();
        } finally {
            Ebean.endTransaction();
        }

値を取得するCloud Function側のJSスクリプト

    // GET パラメーター
    if (req.method == 'POST') {

        // DBに接続
        // キーを設定
        // DBに保存する内容を作成する
        const prices = {
            key: datastore.key(['goodsPrices', priceId]),
            data: {
                goods_id: req.body.goodsId,
                action_type: req.body.actionType,
                user_id: req.body.userId,
                price: req.body.price,
                minimum_price: req.body.minimumPrice,
                paid_payment: req.body.paidPayment,
                managements_free: req.body.managementsFree,
                created_ad: req.body.createdAd
            }
        };

        // データベースへ保存
        datastore.upsert(prices)
            .catch(() => res.status(400).send('goodsPrices upsert err')
            );

        for (item in req.body.datas) {
          console.log(req.body.datas)


          // DBに保存する内容を作成する
            const priceDetails = {
                key: datastore.key(['goodsPriceDetails', uuid()]),
                data: {

//// ここから 値の取得ができない

                    bk_goods_prices_id: priceId,
                    goods_id: req.body.datas[item].goodsId,
                    action_type: req.body.datas[item].actionType,
                    order_no: req.body.datas[item].orderNo,
                    price_type_id: req.body.datas[item].priceTypeId,
                    price_item_name: req.body.datas[item].priceItemName,
                    unit_price: req.body.datas[item].unitPrice,
                    created_ad: req.body.datas[item].createdAd
//// ここまで
                }

            };

            // データベースへ保存
            datastore.upsert(priceDetails)
                .catch(() => {
                    res.status(400).send('goodsPrices upsert err');
                });
        }
        res.status(200).send('Success: entryed');

    } else {
        res.status(400).send('No message defined!');
    }
};


備考
こちらでも質問させて頂いております。
https://ja.stackoverflow.com/questions/43048/

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る