AWS API Gateway即使Lambda返回错误也会返回200

4
我正在构建一个AWS API邮件服务,基本上在发送带有数据的邮件之前检查请求正文。它会检查每个必需的参数是否都齐全,并进行一些基本检查以确保数据符合我们要求。
问题是,即使Lambda函数抛出错误(我使用Lambda测试接口验证了这一点),API网关仍将返回200响应代码并将错误对象作为正文返回
这意味着我得到了如下日志:
Tue Apr 11 14:23:43 UTC 2017 : Method response body after transformations: 
{"errorMessage":"\"[BadRequest] Missing email\""}
Tue Apr 11 14:23:43 UTC 2017 : Method response headers: {X-Amzn-Trace-Id=Root=************, Content-Type=application/json}
Tue Apr 11 14:23:43 UTC 2017 : Successfully completed execution
Tue Apr 11 14:23:43 UTC 2017 : Method completed with status: 200

由于最后一部分的原因,我认为API网关返回了200
我做了一些设置来处理错误:
  • 我为错误代码添加了第二个方法响应: enter image description here
  • 我为错误代码添加了第二个集成响应: enter image description here
目前我不确定为什么它仍然无法返回正确的响应。我查看了各种帖子(包括:有没有办法更改Amazon API Gateway返回的HTTP状态代码?如何从AWS Lambda函数返回错误集合/对象并映射到AWS API Gateway响应代码),并阅读了文档。
我还尝试了“Lambda Proxy Way”,但那样没有产生任何结果(该lambda根本没有正确执行)。
有人看到我漏掉了什么吗?
1个回答

2
我看到有几个可能会导致问题的事情。
你的错误消息被引用为:"\"[BadRequest] Missing email\"",所以^[BadRequest]正则表达式将不匹配错误字符串。在我运行的简单测试中,我必须转义[](即\[\]),因为方括号保留用于字符类。
如果不更改您的errorMessage格式,则应该使用这样的模式:^"\[BadRequest\].*

1
是的,就是这样。我所参考的教程没有转义括号。谢谢你,伙计,你救了我的一天! - Lodybo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接