You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用接收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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:54:05