如何调用接收APIGatewayProxyRequestEvent的AWS Lambda函数
问题根因
你遇到的报错和参数空问题核心是传递给Lambda的Payload格式错误:APIGatewayProxyRequestEvent.toString()输出的是Java对象的默认字符串表示,并非Lambda要求的标准JSON格式,既会导致JSON解析失败,也无法正常反序列化为目标对象。
解决方案
步骤1:准备依赖
确保你的项目中已引入JSON序列化依赖,推荐使用Jackson:
<!-- Maven 依赖示例 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-events</artifactId> <version>3.11.1</version> </dependency>
步骤2:正确序列化Event对象为JSON Payload
不要使用toString()方法,改用JSON序列化工具将APIGatewayProxyRequestEvent转为JSON格式后再传入InvokeRequest:
import com.fasterxml.jackson.databind.ObjectMapper; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.model.InvokeRequest; import java.nio.ByteBuffer; // ObjectMapper是线程安全的,建议全局初始化复用 private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); public void invokeLambda() throws Exception { // 构造并填充APIGatewayProxyRequestEvent字段 APIGatewayProxyRequestEvent event = new APIGatewayProxyRequestEvent(); // 按需设置所有你需要的参数,和API网关实际转发的结构保持一致 event.setHttpMethod("POST"); event.setPath("/test/path"); event.setBody("{\"key\":\"value\"}"); // 其他可选字段:headers、queryStringParameters、requestContext等 // 序列化为JSON字节数组 byte[] payload = OBJECT_MAPPER.writeValueAsBytes(event); // 构造调用请求 InvokeRequest req = new InvokeRequest() .withFunctionName("<替换为你的Lambda ARN>") .withPayload(ByteBuffer.wrap(payload)); // 执行调用即可 }
步骤3:可选校验
如果仍出现字段为空的情况,可先将序列化后的JSON字符串打印出来,和API网关实际触发Lambda时传入的Event结构对比,保证字段完全匹配即可。
内容的提问来源于stack exchange,提问作者bobjan
相关产品推荐
相关产品推荐

