如何将 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 端点,则方法类似,但某些术语的术语发生了变化。
我有一个 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 端点,则方法类似,但某些术语的术语发生了变化。