Cloud FunctionsでRequestにセットした配列の値が取得できない
テラテイルにて質問させて頂いておりますが、投稿させてください。
https://teratail.com/questions/120751
前提・実現したいこと
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!');
}
};