如何将 AWS Java Lambda 函数返回的异常转换为 API 网关?

How to transform the returned exception from AWS Java Lambda Function to API Gateway?

我有一个 http 端点名称 - HE。此 'HE' 端点与 Lambda 函数 'L' 相连。

所以 HE-->L

在某些情况下 'L' return 这种格式的例外情况:

{ "errorMessage": "Name John Doe is invalid. Exception occurred...", "errorType": "java.lang.Exception", "stackTrace":[ "example.Hello.handler(Hello.java:9)", "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", "java.lang.reflect.Method.invoke(Method.java:497)" ] }

与 'HE' 编辑的 return 相同。

如何在 'HE' 使用集成响应(AWS API 网关),因此它应该只显示以下内容:

{ "errorMessage": "Name John Doe is invalid. Exception occurred..." }

我不确定我是否正确理解了您的设置。我假设您的 API 网关正在调用您的 Lambda 函数,并且您的 Lambda 函数正在 returning 您作为错误对象提供的字符串。那样的话……

为您的方法添加新的方法响应。将方法响应的 HTTP 状态设置为您想要的 HTTP 状态代码 return,对于这种情况可能是 400。

为您的方法添加新的集成响应。

将集成响应的 "Lambda Error Regex" 设置为将唯一标识错误的正则表达式。 ".Name . is invalid.*" 应该适用于这种情况。

将 "Method response status" 设置为方法响应的 HTTP 状态(在我的示例中为 400)。

点击保存。扩大整合响应。展开 "Body Mapping Templates"。单击 "Add mapping template"。将 Content-Type 设置为 "application/json"(或您想要的任何内容类型)。单击复选框。

在映射模板编辑框中,添加一个这样的映射模板...

#set($inputRoot = $input.path('$'))
{"errorMessage" : "$input.path('$.errorMessage')"}

如果我误解了您的设置并且您的 API 网关正在调用 HTTP 端点,则方法类似,但某些术语的术语发生了变化。