带有Lambda的Amazon Gateway API - 无法将请求主体解析为json

时间:2015-11-06 12:21:40

标签: api amazon-web-services aws-lambda

我似乎遇到了Amazon Gateway API的问题,例如,不喜欢我发送的params。

$.ajax({
        url: "https://tibqwxuqoh.execute-api.us-east-1.amazonaws.com/dev/getitems",
        type: "POST",
        data: {
            "device": "test",
            "datetime": "1446757400919"
        },
        success: function (returnhtml) {
            console.log(returnhtml);
            $("#result").append("DOES NOT WORK - <br>" + JSON.stringify(returnhtml));
        }
    });

    $.ajax({
        url: "https://tibqwxuqoh.execute-api.us-east-1.amazonaws.com/dev/getitems",
        type: "POST",
        data: {},
        success: function (returnhtml) {
            console.log(returnhtml);
            $("#result").append("<br>WORKS ???? - <br>" + JSON.stringify(returnhtml));
        }
    });

这是一个工作示例。 http://jsfiddle.net/Uwcuz/4315/

有人可以告诉我为什么每次添加参数时都不会让我发送参数我会收到此错误。

{
    Type = User;
    message = "Could not parse request body into json.";
} 

好的,但是对我来说是个蠢货。

$.ajax({
        url: "https://tibqwxuqoh.execute-api.us-east-1.amazonaws.com/dev/getitems",
        type: "POST",
        data: "{\"device\": \"test\",\"datetime\": \"1446757444524\"}",
        success: function (returnhtml) {
            console.log(returnhtml);
            $("#result").append("WORKS - <br>" + JSON.stringify(returnhtml));
        }
    });

1 个答案:

答案 0 :(得分:6)

问题在于如何将数据发送到API网关。 在不知道API配置细节的情况下,我猜你有一个application / json的Request Mapping设置。 默认情况下,jQuery会将您的数据发布为application / x-www-form-urlencoded,但您希望将其作为json发送。

你可以做到这一点,而不必自己过多地掌握数据:

if($dataSet.Tables[your table name or index].Rows.Count -gt 0){
    #invoke your email function here
}

这里的关键是JSON.stringify()并告诉jQuery dataType是json以及将contentType设置为application / json。