第一个示例是没有问题的代码:你用这个做一个羊羔: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
}
- 1 回答
- 0 关注
- 172 浏览
添加回答
举报
0/150
提交
取消
