Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过Amazon API网关将POST请求正文传递给Lambda_Java_Json_Amazon Web Services_Aws Lambda_Aws Api Gateway - Fatal编程技术网

Java 通过Amazon API网关将POST请求正文传递给Lambda

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

我有一个用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/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": {
        ...
    }
}