非代理集成下AWS Java Lambda如何让API Gateway返回自定义HTTP状态码
解决方案
非代理集成(Lambda自定义集成)不会自动识别Lambda返回体里的statusCode字段,你需要手动在API Gateway控制台完成以下配置:
1. 配置方法响应
- 进入对应API的方法执行页面,点击「方法响应」
- 新增你需要返回的所有HTTP状态码(例如示例中的502,以及其他用到的4xx、5xx状态码)
- 每个新增的状态码下,按需添加要透传的响应头(例如
X-Amzn-ErrorType、Content-Type),同时配置响应体的内容类型为application/json
2. 配置集成响应的状态码映射规则
- 回到方法执行页面,点击「集成响应」
- 默认存在200状态码的默认响应规则,你需要为每个非200的状态码新增集成响应规则
- 配置Lambda错误正则表达式:匹配Lambda返回内容中的特征值,例如要映射502状态码,可以配置正则匹配
"statusCode": 502或者"errorMessage": "InternalServerError.*",注意正则需要完全匹配目标字符串 - 将该规则的「方法响应状态码」选择为第一步新增的对应状态码(例如502)
3. 配置响应头和响应体映射
- 对每个新增的集成响应规则,展开「头映射」,将需要返回的响应头和Lambda返回的对应字段绑定,例如
Content-Type对应的映射值填写integration.response.body.headers.content-type,X-Amzn-ErrorType对应的映射值填写integration.response.body.headers.X-Amzn-ErrorType - 展开「正文映射模板」,新增
application/json类型的模板,模板内容填写$input.path('$.body')即可直接透传Lambda返回的body字段内容 - 如果你需要支持动态透传任意状态码,可以直接修改默认200集成响应的方法响应状态码,映射值填写
integration.response.body.statusCode,无需逐个配置固定状态码规则
注意事项
- 所有配置修改完成后,必须重新部署API到对应阶段,新配置才会生效
- 如果Lambda返回的是序列化后的JSON字符串而非Java对象,要确保转义格式不会影响正则匹配
内容的提问来源于stack exchange,提问作者interested-dev
相关产品推荐
相关产品推荐

