J'essaie depuis quelques jours d'obtenir un paramètre envoyé de la passerelle API dans AWS à une fonction Lambda et je n'ai aucun succès.
J'ai décidé de commencer depuis le début, j'ai donc suivi leur procédure pas à pas ( http://docs.aws.Amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-new-lambda =)
J'ai vérifié cette procédure deux fois et j'ai suivi les étapes à la lettre.
Lorsque je teste l'API à partir de Postman ou dans Swift je reçois l'erreur:
{"message": "Impossible d'analyser le corps de la demande dans json: caractère inattendu (\ '- \' (code 45)) dans la valeur numérique: chiffre attendu (0-9) pour suivre le signe moins, pour une valeur numérique valide\n à [Source: [B @ c036d15; ligne: 1, colonne: 3] "}
Dans le facteur, quand je vois le résultat en JSON, je reçois juste
Mauvaise chaîne
La fonction est l'exemple de base de la procédure pas à pas:
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
};
Lorsque testé à partir de la console Lambda et avec les données de test, j'obtiens le résultat:
{
"Hello": "TestUser123"
}
Lorsque testé à partir du test API Gateway, le résultat est également:
{
"Hello": "TestUser123"
}
Quelqu'un peut-il voir pourquoi les deux consoles de test autorisent ce travail, mais lorsqu'elles sont testées avec POSTMAN ou utilisées dans un script Swift cela ne fonctionne pas?
Dans Postman, j'ai défini le type de contenu sur application/json
Le script renvoie la valeur par défaut:
{
"Hello": "user"
}
Cependant, lorsque j'ajoute les paramètres nom et TestUser123 dans POSTMAN, c'est quand il renvoie l'erreur.
Ok, j'ai donc changé le modèle de mappage en un que j'ai trouvé sur une autre réponse:
{ "name": "$input.params('name')" }
Maintenant, le résultat est:
{
"Hello": ""
}
Des idées pourquoi il ne reçoit pas le nom?
Je suis juste coincé avec ça aujourd'hui.
votre modèle de cartographie est:
{ "name": "$input.params('name')" }
AWS utilise des modèles AWS Velocity, qui; même si ressemble à JSON, est différent.
si tu utilises
{ "name": $input.params('name') } // notice no quotes
pour le modèle de mappage directement à l'étape de la demande d'intégration, alors il devrait fonctionner comme prévu.
Lisez le message d'erreur très attentivement, il vous indique en fait le problème. Par exemple, j'ai
Impossible d'analyser le corps de la demande dans json: caractère inattendu (\ '\ "\' (code 34)): était s'attendant à ce que la virgule se sépare entrées d'objet
Donc, le problème est que je manque une virgule. Je vérifie mon Lambda demande d'intégration - modèle de cartographie du corps:
{
"age" : $input.json('$.persondata.age'),
"income" : $input.json('$.persondata.income')
"height" : $input.json('$.persondata.height')
}
Pouvez-vous repérer le problème? Je manque une virgule après la ligne de revenu.
Voici un autre exemple.
Impossible d'analyser le corps de la demande dans json: caractère inattendu (\ '} \' (code 125)): valeur attendue
Quand je regarde le demande d'intégration - modèle de cartographie du corps:
#set($inputRoot = $input.path('$'))
{
"age" : $inputRoot.age,
"height" : $inputRoot.height,
"income" : $inputRootincome
}
Pouvez-vous repérer le problème? Il me manque un point dans $ inputRootincome.