Flutter 如何通过API网关将json数据传递给aws lambda?

Flutter 如何通过API网关将json数据传递给aws lambda?,flutter,aws-lambda,aws-api-gateway,Flutter,Aws Lambda,Aws Api Gateway,我试图将JSON发送到AWS lambda以触发lambda处理程序。我正在为这个项目使用颤振网络,我的API端点如下。下面是我使用AWS lambda端点的代码 Future<String> getResponse(jsonData) async { var response = await http.post(Uri.parse("https://7jua06h1r4.execute-api.ap-south-1.amazonaws.com/

我试图将JSON发送到AWS lambda以触发lambda处理程序。我正在为这个项目使用颤振网络,我的API端点如下。下面是我使用AWS lambda端点的代码

  Future<String> getResponse(jsonData) async {
    var response =
        await http.post(Uri.parse("https://7jua06h1r4.execute-api.ap-south-1.amazonaws.com/stage1/calc"), headers: header, body: jsonData);
    if (response.statusCode == 200) {
      print("Success");
    } else {
      print("Error");
    }
  }
当我试着使用邮递员时,它就像预期的那样工作。您可以在下图中看到: [1] :

我的Lambda函数:

import json
import boto3

def lambda_handler(event, context):
    print(event['body'])
    # TODO implement
    return {
        'statusCode': 200,
        'body': event['body']
    }

在这里,我无法从我的应用程序中获取主体,即JSON数据。

我认为在您的代码中需要替换它:

print(event['body'])


事件不是调用主体,主体位于该对象内部,并且您有一个名为body

的属性。当您使用浏览器对其进行测试时,是否将主体传递到url?假设您刚刚键入了url


在浏览器中,您会得到一个空的响应体,这是正确的行为。

您可以在执行请求之前尝试打印jsonData吗?是的,在调用getResponse方法之前,我可以在控制台中获得JSON输出。实际上,正如您在postman图像中所看到的那样。。事实上,这就是我试图解决的错误。我不明白如何在lambda中发送json数据。虽然您可以在函数中看到,但我已经传递了数据。但是我认为,AWS API gateway没有获取数据,因此,lambda显示为空体。在API gateway中,您可以通过将选择的lambda函数指向API gateway来选择执行lambda代理集成。通过这样做,api网关将把它获得的事件对象传递给lambda。这段视频可能会有所帮助:我已经看了这段视频,我想立刻发送整个json。但在视频中,我必须手动给出字段。而且,当我使用Lambda代理时,它会抛出CORS错误。如果邮递员正在工作,这意味着Lambda已经连接到api网关。如果您对lambda是否连接到api网关有疑问,请尝试使lambda函数
返回{'statusCode':200,'test':'yes','body':event['body']}
并再次运行postman,您现在应该可以在lambda代码上看到带'test'字段的api网关返回,我有一个返回状态和身体。当我从浏览器中生成pass数据时,我得到return 200 status,但是body字段返回空值。所以,我猜json数据没有到达lambda。来自颤振的POST请求也在那里。请你看一下好吗。谢谢:)我已经试过你的建议了。发生以下错误。`{“errorMessage”:“'dict'对象没有属性'body'”,“errorType”:“AttributeError”,“stackTrace”:[[“/var/task/lambda_function.py”,19,“generateCV”,“data=event.body.body”]}`,你能给我发代码吗?我没有看到任何dict对象。你能把这件事打印出来吗?
print(event['body'])
print(event.body.body)