Lambda返回错误状态码时,AWS API Gateway始终返回200状态码问题咨询
解决方案
1. 用Lambda代理集成的正确返回格式
如果你的API Gateway用的是Lambda代理集成,Lambda必须返回特定结构的响应,API Gateway才会识别其中的状态码:
{ "statusCode": 400, "headers": { "Content-Type": "application/json" }, "body": "{\"error\": \"Invalid input\"}" }
statusCode字段会被API Gateway直接用作HTTP响应状态码body必须是字符串格式(如果是JSON对象要先序列化)
2. 配置非代理集成的集成响应映射
如果用的是非代理集成,得手动配置API Gateway的集成响应,把Lambda返回的错误映射到对应HTTP状态码:
- 进API Gateway控制台,找到目标API和对应方法
- 切换到「集成响应」标签
- 点击「添加集成响应」,输入Lambda返回内容的错误正则匹配(比如
.*"statusCode":400.*) - 设置对应的HTTP状态码(比如400)
- 配置响应模板,把Lambda返回的内容映射到API响应体
3. 处理Lambda异常情况
如果Lambda抛出错误(不是返回带错误码的响应),需要配置API Gateway的「错误响应」:
- 在集成响应里,添加针对Lambda错误类型的映射(比如
Lambda.ServiceException) - 关联对应的HTTP状态码,比如500
- 可以自定义错误响应体模板
4. 验证返回内容格式
确保Lambda返回的是合法JSON格式,API Gateway才能正确解析状态码字段。如果返回非JSON格式,API Gateway会默认返回200。
比如错误的返回方式:
"error": "Bad request", "status": 400
正确的返回方式(代理集成):
{ "statusCode": 400, "body": "{\"error\": \"Bad request\"}" }
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

