ApexRESTにてPOSTで送信された配列のデータを受け取る
RestApexを作成していて、配列でPOSTした値はどうやって取得するのかを調べてみた。
例えば、POSTでidというパラメータで送信した内容は以下のようにして取得可能。
RestRequest req = RestContext.request;
String id = req.params.get('id');
しかし配列だとこれでは取得できなかった。
送信データ
$value = [
'hoge'=>['1', '2', '3']
];
受信
RestRequest req = RestContext.request;
String id = req.params.get('hoge'); //null
なので、どのようにしてデータがわたっているのかを出力させてみた。
送信したデータ
$value = [
'id'=>'hoge',
'arr'=>['1', '2', '3']
];
出力させたコード
RestRequest req = RestContext.request;
System.debug(req.params);
出力結果
{arr[0]=1, arr[1]=2, arr[2]=3, id=hoge}
どうやらちゃんとデータは受け取れているよう。
このreq.params
で受け取るデータの型はMap
になっているよう。
以下のように出来る。
RestRequest req = RestContext.request;
Map<String, String> p = req.params;
ということはキーを取得できるし、キーから中身を全て取り出す事もできる。
そんなわけで、かなり無理矢理だけど、指定したキーの中身を取り出す関数を作ってみた。
配列で受け取る場合はフォームではチェックボックス、SF上では複数選択リスト、になるので、
SFの形式に合わせて、;
セミコロン区切りの文字列として返すようにした。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
上記のarr
というキーのデータを取り出す場合は以下のように。
RestRequest req = RestContext.request;
Map<String, String> p = req.params;
String arrs = convertArrayPostData(p, 'arr'); //1;2;3