如何在AWS API Gateway中为错误响应配置HTTP状态码——解决Postman中请求无论成败均返回200的问题
解决AWS API Gateway错误响应状态码的问题
首先,咱们先搞清楚为啥你现在不管请求成功失败都拿到200——这是因为API Gateway默认会把后端返回的所有响应都封装成200状态码返回给客户端,哪怕后端已经返回了错误信息。要让失败时返回对应状态码,你需要配置**方法响应(Method Responses)和集成响应(Integration Responses)**来映射错误场景。
步骤1:定义方法响应(Method Responses)
首先你得告诉API Gateway,你的方法支持哪些错误状态码(比如400、500这些):
- 进入你的API Gateway控制台,找到对应的API和目标方法(比如POST/GET)
- 切换到Method Response标签页
- 点击Add Response,输入你想要返回的错误状态码(比如
400),完成后保存 - 重复这个步骤添加其他需要的错误码(比如
500)
步骤2:配置集成响应(Integration Responses)
这一步是把后端返回的失败标识(比如你返回的Status: "Failure")映射到刚才定义的HTTP状态码:
- 切换到Integration Response标签页
- 点击Add Integration Response,在匹配规则里(Lambda后端用Lambda Error Regex,HTTP后端用HTTP Status Regex),写入能匹配你失败响应的正则表达式,比如针对你给出的格式,可以用
"Status":\s*"Failure"来精准命中失败场景 - 选择刚才在Method Response里创建的对应错误状态码(比如
400) - 配置响应模板确保返回内容符合你的需求:
- 展开Mapping Templates,点击Add mapping template,输入
application/json - 勾选Never modify integration response,这样就能直接返回后端的原始失败响应JSON;如果需要调整格式,可以用
$input.path('$')直接引用原始响应内容
- 展开Mapping Templates,点击Add mapping template,输入
针对你给出的失败响应格式的补充
因为你的失败响应里已经明确包含Status: "Failure"字段,所以配置正则匹配时一定要确保能精准捕获这个特征。如果后端是Lambda函数,不管是函数抛出的错误还是主动返回的JSON里包含该字段,API Gateway都能识别并映射到指定状态码。
测试验证
配置完成后必须部署你的API(这一步很容易忘,不部署的话配置不会生效),之后再用Postman调用:
- 请求失败时,API Gateway会返回你配置的错误状态码(比如400),同时返回你定义的失败响应JSON
- 请求成功时仍会返回200和对应的成功响应
另外,如果你用的是Lambda代理集成,配置会更简单:只需要让Lambda函数直接返回包含statusCode字段的响应对象,示例如下:
{ "statusCode": 400, "body": "{\"ResponseHeader\": { \"ResponseId\": \"c4ddf534-4634-45d8-af1a-bad89ae63066\", \"RefRequestId\": \"dd2338e3-11ab-42cc-9c5a-4d88babbab91\", \"Status\": \"Failure\", \"Message\": \"Response Failed\", \"ResponseContext\": { \"ResponseTime\": {} } }}" }
这种情况下,API Gateway会直接使用Lambda返回的statusCode作为HTTP响应码,无需额外配置方法响应和集成响应。
内容的提问来源于stack exchange,提问作者Srinath reddy




