Java 通过Amazon API网关将POST请求正文传递给Lambda
我有一个用Java编写的AWS Lambda函数,它由AWS API网关调用触发 我试图向其中一个端点发出Java 通过Amazon API网关将POST请求正文传递给Lambda,java,json,amazon-web-services,aws-lambda,aws-api-gateway,Java,Json,Amazon Web Services,Aws Lambda,Aws Api Gateway,我有一个用Java编写的AWS Lambda函数,它由AWS API网关调用触发 我试图向其中一个端点发出POST请求,并使用JSON作为有效负载 curl -H "Content-Type: application/json" -X POST -d '{"firstName":"Mr", "lastName":"Awesome"}' https://someexample.execute-api.eu-central-1.amazonaws.com/beta/MethodHandlerLamb
POST
请求,并使用JSON作为有效负载
curl -H "Content-Type: application/json" -X POST -d '{"firstName":"Mr", "lastName":"Awesome"}' https://someexample.execute-api.eu-central-1.amazonaws.com/beta/MethodHandlerLambda
然后网关将检测内容类型
,并通过默认值传递所有请求参数(包括正文)。有趣的是这一部分
#set($allParams = $input.params())
{
"body-json" : $input.json('$'),
....
它应该向我提供一个映射
,该映射被传递到我的Java方法:
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" : $input.body
但这同样只是“转换”为key=value
,而不是key:value
我必须如何配置模板以简单地将主体传递给我,以便在JSON解析器中使用它?再次-只需在此处发布一个问题,就可以帮助您自己找到答案:) 在AWSAPI网关模板中,我将主体设置为
"body-json" : $input.body
它将以字符串形式返回完整的有效负载
但更重要的是,我阅读并改变了我的方法
因此,只要有一个简单的InputStream
并将其作为JsonNode
读取就足够了,可以使用任何喜欢的JSON库(我使用的是Jackson-FasterXML)。瞧,它将所有可能的参数打包在一个JSON中(由模板指定)
我可以使用$input.body创建post请求。。但是$input.json(“$”)有什么用呢。。如果我的负载是Json。。我怎么能解释它。。在AWS站点浏览以下文档的同时,我还尝试从lambda检索Json。。但它给了我一个空白的花括号。
"body-json" : $input.body
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());
}
{
"body-json": {
"firstName": "Mr",
"lastName": "Awesome"
},
"params": {
...
},
"stage-variables": {
...
},
"context": {
...
}
}