使用 Lambda 的 Amazon Gateway API - 无法将请求正文解析为 json

Amazon Gateway API with Lambda - Could not parse request body into json

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

$.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));
        }
    });

问题在于您如何将数据发送到 API 网关。 在不知道 API 配置的详细信息的情况下,我猜测您有 application/json 的请求映射设置。 jQuery 默认情况下 post 您的数据为 application/x-www-form-urlencoded 但您想将其作为 json.

发送

您可以做到这一点,而不必自己 fiddle 过多地处理数据:

var requestParams = {
    url: "https://tibqwxuqoh.execute-api.us-east-1.amazonaws.com/dev/getitems",
    method: "POST,
    contentType: "application/json",
    dataType: "json",
    data: JSON.stringify({
        "device": "test",
        "datetime": "1446757400919"
    });
};
var request = $.ajax(requestParams);

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