3

我有一个简单的 POST 方法连接到我的AWS API Gateway中的 lambda 函数。

当我执行测试(通过网关 API 控制台)时,一切正常,测试得到我正在寻找的结果。它很简单——发布一个 JSON,取回一个 JSON。

但是,在部署 API 并发送测试中使用的相同 JSON 之后(通过 http post),我得到'Could not parse request body into json'

有谁知道我可能做错了什么?注意:我不想使用模型,我只想传递 JSON。我相信,当亚马逊编写诸如“输入传递”之类的内容时,它们意味着输入可以传递给 lambda 函数。

以下是我的 AWS Gateway API 设置的图片:

方法请求: 在此处输入图像描述

集成请求: 在此处输入图像描述

方法响应: 在此处输入图像描述

集成响应: 在此处输入图像描述

4

2 回答 2

7

我找到了解决方案。问题是在 POST 请求中,您需要将正文作为字符串而不是 JSON 对象发送,并且该字符串需要正确格式化

即'{"key1": "val1","key2": 22,"key3": 15,"key4": "val4"}'

像这样:

function post() {


$.ajax({
    url: "https://myapi.us-east-1.amazonaws.com/myStage/myPath",
    type: "POST",
    data: '{"key1": "val1","key2": 22,"key3": 15,"key4": "val4"}',
    mozSystem: true,
    dataType: "text", //set to"json" usually
    success: function (result) {
        switch (result) {
            case true:
                processResponse(result);
                break;
            default:
                resultDiv.html(result);
        }
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert('error ' + xhr.status + ' ' + thrownError);
        alert(thrownError);
    }
 });


};
于 2015-10-29T20:28:32.933 回答
0

以字符串格式设置参数(没有 json 和数组):

我在 curl 执行中使用了 http_build_query() 函数:

$curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_URL => "https://your_url_here",
            CURLOPT_POST => 1,
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_POSTFIELDS => http_build_query(array(
                "key1" => "val1",
                "key2" => "val2",
            ))
        ));

        $resp = curl_exec($curl);
        print_r($resp);
        if (!curl_exec($curl)) {
            die('Error: "' . curl_error($curl) . '" - Code: ' . curl_errno($curl));
        }
        curl_close($curl);
于 2016-09-21T10:44:30.603 回答