AWS Lambda发生错误时如何返回自定义状态码与响应体?
问题原因
你的代码存在两个关键错误,导致API Gateway始终返回默认的200状态码:
- 错误1:将包含
statusCode、headers、body的完整响应字典整体做了json.dumps序列化后返回。这种情况下Lambda会把序列化后的整段字符串当成普通响应体处理,不会解析其中的statusCode字段,API Gateway读取不到自定义状态码,就会默认返回200 OK。 - 错误2:Lambda代理集成模式要求响应结构里的
body字段必须是字符串类型,你当前直接把Python字典赋值给body,即使修正了序列化逻辑,也会触发响应格式校验错误。
修复方案
不要序列化整个响应对象,只需要单独把body内的内容序列化为JSON字符串,直接返回结构化的响应字典即可,参考代码:
import json def lambda_handler(event, context): try: # 此处编写你的业务逻辑 pass except Exception as e: return { 'statusCode': 404, 'headers': { 'Content-Type': 'application/json', }, 'body': json.dumps({ "error": str(e) }) }
补充说明:如果你使用的是Lambda非代理集成模式,还需要提前在API Gateway控制台的「方法响应」「集成响应」配置中,提前定义好对应404状态码的映射规则,否则依然无法正常返回自定义状态码。日常开发中绝大多数场景都会使用代理集成模式,按上述代码写法即可正常返回自定义状态码与响应体。
内容的提问来源于stack exchange,提问作者Ícaro Gabriel
相关产品推荐
相关产品推荐

