AWSのAPI GatewayからLambda関数に送信されるパラメーターを取得しようと数日試みましたが、成功していません。
私は最初から始めることに決めたので、彼らのウォークスルーに従いました( http://docs.aws.Amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-new-lambda =)
私はこのチュートリアルを2回確認し、手紙の手順に従いました。
PostmanからまたはSwift=でAPIをテストすると、エラーが発生します。
{"メッセージ": "要求本文をjsonに解析できませんでした:数値の予期しない文字(\ '-\'(コード45)):有効な数値の場合は、マイナス記号の後に数字(0-9)が必要です\ n [出典:[B @ c036d15;行:1、列:3] "}
郵便配達員で、結果をJSONとして表示すると、
悪い文字列
この関数は、チュートリアルの基本的な例です。
console.log('Loading event');
exports.handler = function(event, context) {
var name = (event.name === undefined ? 'No-Name' : event.name);
console.log('"Hello":"' + name + '"');
context.done(null, {"Hello":name}); // SUCCESS with message
};
Lambda Consoleからテストデータをテストすると、結果が得られます。
{
"Hello": "TestUser123"
}
API Gatewayテストからテストすると、結果も次のようになります。
{
"Hello": "TestUser123"
}
両方のテストコンソールがこの動作を許可している理由を誰でも見ることができますが、POSTMANでテストした場合、またはSwiftスクリプト内で使用した場合、動作しませんか?
郵便配達員では、content-typeをapplication/jsonに設定しました
スクリプトはデフォルトを返します:
{
"Hello": "user"
}
ただし、POSTMANでパラメーターnameおよびTestUser123を追加すると、これがエラーを返すときです。
それでは、マッピングテンプレートを別の回答で見つけたものに変更しました。
{ "name": "$input.params('name')" }
結果は次のとおりです。
{
"Hello": ""
}
なぜ名前を得ていないのですか?
私は今日これで立ち往生しました。
マッピングテンプレートは次のとおりです。
{ "name": "$input.params('name')" }
AWSはAWS Velocityテンプレートを使用します。 JSONのように見えても、異なります。
使用する場合
{ "name": $input.params('name') } // notice no quotes
統合要求ステップでのマッピングテンプレートの場合、期待どおりに動作するはずです。
エラーメッセージを非常に注意深く読んでください。実際に問題がわかります。たとえば、私は
リクエスト本文をjsonに解析できませんでした:予期しない文字(\ '\ "\'(コード34)):was expectカンマを区切るオブジェクトエントリ
問題は、コンマが欠落していることです。 LambdaのIntegration Request-Body Mapping Template:を確認します
{
"age" : $input.json('$.persondata.age'),
"income" : $input.json('$.persondata.income')
"height" : $input.json('$.persondata.height')
}
問題を見つけることができますか?収入行の後にコンマがありません。
別の例を示します。
要求本文をJSONに解析できませんでした:予期しない文字(\ '} \'(コード125)):値が必要です
Integration Request-Body Mapping Templateを見ると:
#set($inputRoot = $input.path('$'))
{
"age" : $inputRoot.age,
"height" : $inputRoot.height,
"income" : $inputRootincome
}
問題を見つけることができますか? $ inputRootincomeにドットがありません。