将JSON字符串从API网关传递到Lambda

时间:2019-07-18 20:17:44

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

我是AWS Lambda和api网关的新手,我正在尝试将json字符串传递给lambda函数。

但是,lambda并未与字符串一起调用。

这是lambda。它获取一个对象作为输入,并返回该类的字符串表示形式和该对象的值。


    public class TestMapping implements RequestHandler<Object, String> {
        @Override
        public String handleRequest(Object input, Context context) {
            return "inputClass = " + input.getClass() + ", input = " + String.valueOf(input);
        }
    }

api网关的映射模板是


    #set($allParams = $input.params().querystring)
    {
       "resourcePath" : "$context.resourcePath",
       "httpMethod" : "$context.httpMethod",
       "header": "$input.params().header",
       "path": "$input.params().path", 
       "inputJson": "$input.json()",
       "queryParameters" : [
        #foreach($type in $allParams.keySet())
        {"name": "$type", "value": "$allParams.get($type)"}#if($foreach.hasNext),
        #end
    #end

        ]
    }

api网关测试中的日志显示:


    Endpoint request body after transformations: {
       "resourcePath" : "/testmapping",
       "httpMethod" : "GET",
       "header": "{}",
       "path": "{}", 
       "inputJson": "",
       "queryParameters" : [
            {"name": "month", "value": "6"},
            {"name": "employeeId", "value": "1"}
        ]
    }

我希望将json字符串传递给lambda(作为字符串对象),但与此相反,TestMapping Lambda返回


    "inputClass = class java.util.LinkedHashMap, input = {resourcePath=/testmapping, httpMethod=GET, header={}, path={}, inputJson=, queryParameters=[{name=month, value=6}, {name=employeeId, value=1}]}"

如您所见,LinkedHashMap被传递给lambda。

我该怎么办,以将字符串对象传递给带有json字符串作为值的lambda?

1 个答案:

答案 0 :(得分:0)

API网关映射仅支持发送JSON对象(发送到Java Lambda时将转换为LinkedHashMap)。您应该简单地将LinkedHashMap转换为Lambda处理程序中的字符串。

有一个in this question的示例,如下所示:

String jsonString = new JSONObject(data).toString()