首页 > 解决方案 > 使用无服务器调用函数时传递 JSON

问题描述

我正在运行一个使用无服务器用 Go 编写的 lambda 函数,我想在调用它时向它传递几个参数。

这是我为接收请求而创建的结构:

type RequestStruct struct {
    StartAt int `json:"startAt"`
    EndAt   int `json:"endAt"`
}

在处理程序中,我试图打印出这些值:

func Handler(ctx context.Context,request RequestStruct) (Response, error) {
    fmt.Printf("Request: %v",request)

--raw我尝试使用该选项调用它,所以我尝试这样做

serverless invoke -f orders --raw -d '{"startAt":1533513600,"endAt":1534118399}'

我试着用双引号括起来

serverless invoke -f orders --raw -d "{startAt:1533513600,endAt:1534118399}"

serverless invoke -f orders --raw -d "{\"startAt\":1533513600,\"endAt\":1534118399}"

我收到了所有三个错误:

{
    "errorMessage": "json: cannot unmarshal string into Go value of type main.RequestStruct",
    "errorType": "UnmarshalTypeError"
}

我不确定我做错了什么,我可以在网上找到任何示例,只有这个无服务器文档关于如何执行调用和这个aws 文档关于如何处理 Go 中的事件

更新 我尝试从 AWS 控制台调用事件并且它起作用了,所以问题出在无服务器调用命令中。

标签: amazon-web-servicesgoaws-lambdaserverless-framework

解决方案


我通过将我的 JSON 放在文件中而不是命令本身中找到了解决此问题的方法,这并不能解决我在问题中遇到的问题,但它是一种使用 Json 调用函数的方法

我添加了一个events/startAndEnd.json包含我的 json 数据的文件:

{
    "startAt":1533513600,
    "endAt":1534118399
}

并在调用命令中引用了该文件:serverless invoke -f orders --path events/startAndEnd.json


推荐阅读