【发布时间】: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