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

Lambda+API Gateway测试与Postman请求返回不一致问题求助

问题排查与解决方案

问题根源

Lambda控制台测试的事件是直接将JSON作为event的顶层结构,但通过API Gateway转发请求时,event的结构完全不同——POST请求的JSON体被封装在event['body']字段中,且是JSON字符串格式,而非解析后的对象。这就是为什么直接用event.get("number")会返回null。

修复代码

修改Lambda函数,先解析body字段中的JSON字符串,再提取number值,同时兼容控制台测试的场景:

import json
import random 

def lambda_handler(event, context):
    # 解析请求体(兼容API Gateway和控制台测试)
    if event.get("body"):
        try:
            body_data = json.loads(event["body"])
            phone = body_data.get("number")
        except json.JSONDecodeError:
            return {
                'statusCode': 400,
                'body': json.dumps({"error": "无效的请求体格式,请发送JSON数据"})
            }
    else:
        # 适配控制台测试的事件结构
        phone = event.get("number")
    
    otp = random.randint(1000, 10000)    
    result = {"phone": phone, "otp": otp}
    
    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }

额外排查步骤

  • 检查API Gateway集成模式:如果使用的是Lambda代理集成(默认推荐),无需额外映射模板;如果是非代理集成,需要配置映射模板将请求体映射到event的顶层字段(不推荐,代理集成更灵活)。
  • 验证Postman请求格式:确保请求Headers中包含Content-Type: application/json,且请求体是原始JSON格式,而非form-data、x-www-form-urlencoded等其他格式。
  • 查看CloudWatch日志:在Lambda函数开头添加print(json.dumps(event)),然后通过CloudWatch日志查看实际收到的event结构,能直观定位字段位置问题。

内容的提问来源于stack exchange,提问作者Samridh Anand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:38:11