我从 https://github.com/aws/aws-lambda-go/blob/master/events/README_ApiGatewayEvent.md 得到了这个代码:package mainimport ( "context" "fmt" "log" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda")func handleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { fmt.Printf("Processing request data for request %s.\n", request.RequestContext.RequestID) fmt.Printf("Body size = %d.\n", len(request.Body)) fmt.Println("Headers:") for key, value := range request.Headers { fmt.Printf(" %s: %s\n", key, value) } log.Printf("%v", request.Body) return events.APIGatewayProxyResponse{Body: request.Body, StatusCode: 200}, nil}func main() { lambda.Start(handleRequest)}我只添加了:日志:日志。Printf(“%v”, request.正文)当我编译并使用 lambda 测试 GUI 时,我发送以下内容:{"body":"[{\"id\":\"123\"}]"}选项卡中的日志显示以下内容:2021/08/16 08:51:50 [{"id":"123"}]但是,当我这样做时:curl https://qmk743l1p0.execute-api.us-east-1.amazonaws.com/default/simplegateway -d '{"body":"[{\"id\":\"123\"}]"}' --header "Content-Type: application/json"我在云监视日志中得到这个:2021/08/16 08:56:07 {"body":"[{\"id\":\"123\"}]"} 我不知道为什么请求.body在通过http网关时会有两个不同的值。如何在 lambda 测试 GUI 中和通过 http API 网关获取预期的“正文”?
1 回答
墨色风雨
TA贡献1853条经验 获得超6个赞
发生这种情况是因为您的处理程序在这两种情况下具有相同的签名,但这意味着什么根据代理您的请求而有所不同。
当您从 Lambda GUI 发送请求时,正文会立即被解封到 中。该结构具有一个字段,该字段定义为:events.APIGatewayProxyRequest
Body string `json:"body"`
因此,当您发送有效负载 时,将使用 JSON 属性的值填充该字段,该属性为{"body":"[{\"id\":\"123\"}]"}json.Unmarshalbody[{"id":"123"}]
当通过 API 网关代理相同的请求时,网关会按原样构造一个包含您的有效负载的 AWS 事件,因此它可能如下所示:
{
... "body": "{\"body\":\"[{\"id\":\"123\"}]\"}\"
}只有这样,事件才会被解聚到结构中,导致字段具有值 。events.APIGatewayProxyRequestBody{"body":"[{\"id\":\"123\"}]"}
- 1 回答
- 0 关注
- 133 浏览
添加回答
举报
0/150
提交
取消
