【问题标题】:passing POST request body through Amazon API Gateway to Lambda通过 Amazon API Gateway 将 POST 请求正文传递给 Lambda
【发布时间】:2017-11-30 14:23:37
【问题描述】:

我有一个用 Java 编写的 AWS Lambda 函数,它由 AWS API Gateway 调用触发。

我正在尝试使用 JSON 作为有效负载向其中一个端点发出 POST 请求。

curl -H "Content-Type: application/json" -X POST -d '{"firstName":"Mr", "lastName":"Awesome"}' https://someexample.execute-api.eu-central-1.amazonaws.com/beta/MethodHandlerLambda

网关随后将检测Content-Type,并通过默认template 传递所有请求参数(包括正文)。有趣的是这个

#set($allParams = $input.params())
{
"body-json" : $input.json('$'),
 ....

它应该向我展示一个传递给我的 Java 方法的Map<String, Object>

public void myHandler(Map<String, Object> input, Context context){
    input.keySet().forEach((key) -> {
        System.out.println(key + " : " + input.get(key));
    });
}

结果应该是这样的:

body-json : {"firstName":"Mr", "lastName":"Awesome"}
...

但我得到的是:

body-json : {firstName=Mr, lastName=Awesome}

另一种可能性是将整个正文作为字符串传递:

"body" : $input.body

但这又只是“转换”为key=value 而不是key:value

如何配置模板以简单地将正文传递给我,以便我可以在 JSON 解析器中使用它?

【问题讨论】:

    标签: java json amazon-web-services aws-lambda aws-api-gateway


    【解决方案1】:

    再一次 - 在 SO 上发布问题有助于您自己找到答案 :)

    在 AWS Api Gateway 模板中,我将正文设置为

    "body-json" : $input.body
    

    哪个应该将完整的负载作为字符串返回。

    但更重要的是我阅读了Greggs answer to his own question 并将我的方法更改为

    public void myHandler(InputStream inputStream, OutputStream outputStream, Context context) throws IOException{
        final ObjectMapper objectMapper = new ObjectMapper();
        JsonNode json = objectMapper.readTree(inputStream);
        System.out.println(json.toString());        
    }
    

    因此,拥有一个简单的InputStream 并将其读取为JsonNode 就足够了,无论您喜欢什么JSON 库(我正在使用Jackson FasterXML)。瞧,它将所有可能的参数打包在一个 JSON 中(由模板指定)

    {
        "body-json": {
            "firstName": "Mr",
            "lastName": "Awesome"
        },
        "params": {
           ...
        },
        "stage-variables": {
           ...
        },
        "context": {
            ...
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2021-10-23
    • 2020-10-15
    • 2015-11-10
    • 2020-04-26
    • 2020-01-22
    • 2016-02-07
    • 2019-12-22
    • 1970-01-01
    相关资源
    最近更新 更多