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

use*_*606 2 api amazon-web-services aws-lambda

我似乎遇到了一个问题,就是亚马逊网关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));
        }
    });
Run Code Online (Sandbox Code Playgroud)

这是一个有效的例子. http://jsfiddle.net/Uwcuz/4315/

有人可以让我知道为什么它不会让我每次添加参数时发送参数我得到这个错误.

{
    Type = User;
    message = "Could not parse request body into json.";
} 
Run Code Online (Sandbox Code Playgroud)

好的,但这对我来说真的很麻烦.

$.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));
        }
    });
Run Code Online (Sandbox Code Playgroud)

pol*_*ene 6

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

您可以这样做,而无需自己过多地调整数据:

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);
Run Code Online (Sandbox Code Playgroud)

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