我是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?
答案 0 :(得分:0)
API网关映射仅支持发送JSON对象(发送到Java Lambda时将转换为LinkedHashMap)。您应该简单地将LinkedHashMap转换为Lambda处理程序中的字符串。
有一个in this question的示例,如下所示:
String jsonString = new JSONObject(data).toString()