AWS API 网关 - 调用 API 方法时出错 - 'Could not parse request body into json'
AWS API Gateway - Error when calling API method - 'Could not parse request body into json'
我有一个简单的 POST 方法连接到我的 AWS API Gateway 中的 lambda 函数。
当我执行测试(通过网关 API 控制台)时,一切正常,测试得到了我正在寻找的结果。很简单——post一个JSON,找回一个JSON.
但是,在部署 API 然后发送测试中使用的相同 JSON 之后(通过 http post),我得到 'Could not parse request body into json'.
有谁知道我可能做错了什么?
注意:我不想使用模型,我只想传递 JSON。我相信当亚马逊写 'input passthrough'
它们意味着输入可以传递给 lambda 函数。
这是我的 AWS 网关 API 设置的图像:
方法请求:
集成请求:
方法响应:
积分响应:
我找到了解决方案。问题是,在 POST 请求中,您需要将 body 作为字符串发送,而不是 JSON object 并且该字符串需要正确格式化
ie '{"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);
}
});
};
以字符串格式设置参数(无 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);
我有一个简单的 POST 方法连接到我的 AWS API Gateway 中的 lambda 函数。
当我执行测试(通过网关 API 控制台)时,一切正常,测试得到了我正在寻找的结果。很简单——post一个JSON,找回一个JSON.
但是,在部署 API 然后发送测试中使用的相同 JSON 之后(通过 http post),我得到 'Could not parse request body into json'.
有谁知道我可能做错了什么? 注意:我不想使用模型,我只想传递 JSON。我相信当亚马逊写 'input passthrough' 它们意味着输入可以传递给 lambda 函数。
这是我的 AWS 网关 API 设置的图像:
方法请求:
集成请求:
方法响应:
积分响应:
我找到了解决方案。问题是,在 POST 请求中,您需要将 body 作为字符串发送,而不是 JSON object 并且该字符串需要正确格式化
ie '{"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);
}
});
};
以字符串格式设置参数(无 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);