为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过 API 网关将 JSON 数组发布到 AWS Lambda?

如何通过 API 网关将 JSON 数组发布到 AWS Lambda?

Go
慕的地6264312 2022-09-19 20:48:49
第一个示例是没有问题的代码:你用这个做一个羊羔:package mainimport (    "github.com/aws/aws-lambda-go/lambda")func main() {    lambda.Start(Handler)}func Handler(s interface{}) (interface{}, error) {    return s, nil}当我转到lambda的测试部分时,我用这个作为我的测试:{"id":"123"}并返回:{"id":"123"}然后,我使用这个作为 lambda GUI 中的测试:[{"id":"123"}]并返回:[{"id":"123"}]我把它放在一个API网关后面,并发送相同的字符串:curl https://69wisebmza.execute-api.us-east-1.amazonaws.com/default/simplestlambda -d '{"id":"123"}' --header "Content-Type: application/json"这将返回一个响应,其开头为:{"id":"123"}所以这是有问题的代码 - 唯一的变化是它接受并返回一段接口:package mainimport (    "github.com/aws/aws-lambda-go/lambda")func main() {    lambda.Start(Handler)}func Handler(s []interface{}) ([]interface{}, error) {    return s, nil}从 lambda GUI 测试控制台中,我发送:[{"id":"123"}]并接收回:[{"id":"123"}]从同一个控制台,我发送:{"id":"123"}并接收回此预期错误:{  "errorMessage": "json: cannot unmarshal object into Go value of type []interface {}",  "errorType": "UnmarshalTypeError"}目前为止,一切都好。现在,我把它放在一个API网关后面,并执行以下操作:curl https://oz72tn566l.execute-api.us-east-1.amazonaws.com/default/simplestslice -d '[{"id":"123"}]' --header "Content-Type: application/json"我得到:{"message":"Internal Server Error"}日志显示:json: cannot unmarshal object into Go value of type []interface {}: UnmarshalTypeErrornull所以我想知道为什么这可能不起作用?
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

当您通过其他 AWS 事件源代理请求时,发送到 lambda 的有效负载将打包到事件对象中。


对于 API 网关,负载是一个事件。APIGateway代理请求,它不是切片,不能编组成.[]interface{}


github 存储库有一段文档,演示如何构建处理程序。总之:aws-lambda-go


func echoHandler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {

    fmt.Println(request.Body) // prints [{"id":"123"}]

    return events.APIGatewayProxyResponse{Body: request.Body, StatusCode: 200}, nil

}


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号