Amazon web services 使用AWS API网关和Java处理错误响应状态代码/实体
我不熟悉AWS API网关,我将其与AWS Lambda(Java)一起使用。Amazon web services 使用AWS API网关和Java处理错误响应状态代码/实体,amazon-web-services,aws-lambda,aws-api-gateway,Amazon Web Services,Aws Lambda,Aws Api Gateway,我不熟悉AWS API网关,我将其与AWS Lambda(Java)一起使用。 显然,更改响应状态代码(为4xx、5xx等)的唯一方法是返回一个字符串,该字符串必须与资源的集成响应部分中的Lambda error regex相匹配,或者抛出一个异常,该异常还应包含与regex相匹配的消息,对吗 但是,如果我只能返回一个字符串,如何为响应实体提供更多详细信息? 下面是我的RESTful API用来返回的内容以及相应的错误状态代码: { "code": "123", "message
显然,更改响应状态代码(为4xx、5xx等)的唯一方法是返回一个字符串,该字符串必须与资源的集成响应部分中的Lambda error regex相匹配,或者抛出一个异常,该异常还应包含与regex相匹配的消息,对吗 但是,如果我只能返回一个字符串,如何为响应实体提供更多详细信息?
下面是我的RESTful API用来返回的内容以及相应的错误状态代码:
{
"code": "123",
"message": "Invalid email address",
"path": "/email"
}
code属性对于调试或国际化(i18n)很有用,路径是要更正的字段。有时我将其包装在一个“error”JSON对象中,有时我返回一个验证错误列表,而不是仅返回一个错误,等等。我根据项目规范对其进行定制 如何使用API网关生成这样的响应实体?
谢谢 编辑:多亏了肯布罗达根的建议,我终于做到了:
1.我将我的错误对象字符串化(使用Jackson
ObjectMapper
)2.我抛出一个
RuntimeException
,将字符串化错误作为消息在集成响应中:
3.我将我的错误的某些属性用于Lambda error regex
4.我映射了这个模板
{ "error": $input.path('$.errorMessage') }
然后API响应(如果发生错误)变为
现在非常基本,但比只在响应中获取字符串要好
显然,更改响应状态代码(为4xx、5xx等)的唯一方法是返回一个字符串,该字符串必须与资源的集成响应部分中的Lambda error regex相匹配,或者抛出一个异常,该异常还应包含与regex相匹配的消息,对吗
对
在目标响应中,您可以配置映射模板,该模板可以从Lambda访问响应的任何其他部分以及上下文变量,如下所述:
因此,您可以在“/email”下的400响应上设置映射模板
{
"code": "123",
"message": "Invalid email address",
"path": "$context.resourcePath"
}
或者类似的。这将是为Lambda错误->状态代码映射设置自定义响应主体的唯一方法
显然,更改响应状态代码(为4xx、5xx等)的唯一方法是返回一个字符串,该字符串必须与资源的集成响应部分中的Lambda error regex相匹配,或者抛出一个异常,该异常还应包含与regex相匹配的消息,对吗
对
在目标响应中,您可以配置映射模板,该模板可以从Lambda访问响应的任何其他部分以及上下文变量,如下所述:
因此,您可以在“/email”下的400响应上设置映射模板
{
"code": "123",
"message": "Invalid email address",
"path": "$context.resourcePath"
}
或者类似的。这将是为Lambda错误->状态代码映射设置自定义响应主体的唯一方法 我知道您正在使用Java,但我对node比较熟悉,所以我更容易用这种方式进行原型设计。希望它能顺利翻译过来 这是我在node中创建的原型函数。目标是将err对象作为错误中的JSON响应体返回。status属性将用于映射到相应的HTTP状态
exports.handler = function(event, context) {
var response = {
status: 400,
message: "Error details",
path: "/x"
}
context.fail(JSON.stringify(response));
};
要使用status属性值映射到HTTP 400,然后将整个结构作为JSON响应返回,请执行以下操作:
要让API网关返回多个不同的状态结果,您需要为每个结果设置单独的集成响应映射。您可以将相同的模板复制/粘贴到每个模板中。我知道您正在使用Java,但我更熟悉node,因此我更容易以这种方式进行原型制作。希望它能顺利翻译过来 这是我在node中创建的原型函数。目标是将err对象作为错误中的JSON响应体返回。status属性将用于映射到相应的HTTP状态
exports.handler = function(event, context) {
var response = {
status: 400,
message: "Error details",
path: "/x"
}
context.fail(JSON.stringify(response));
};
要使用status属性值映射到HTTP 400,然后将整个结构作为JSON响应返回,请执行以下操作: