集成响应中的AWS API网关标头和正文映射

时间:2017-11-02 18:51:43

标签: json amazon-web-services aws-lambda aws-api-gateway

我正在尝试在API网关端点的集成响应中正确设置Body Mapping和Header Mapping。

在我们的Lambda中,我们有

if (response.statusCode == 200) {
    context.succeed(output);
} else if (response.statusCode == 206) {
    var paginationObject = {
        errorType : "PartialContent",
        errorCode : 206,
        detailedMessage : "PartialContent Returned",
        stackTrace : [],
        data : {
               output
        }
    };

    context.fail(JSON.stringify(paginationObject));
}

然后我使用。* PartialContent。* 的Lambda Error Regex处理集成响应中的这个,并将我的Body Mapping模板设为

#set($allParams = $input.params())
#set($body = $util.parseJson($input.json('$.errorMessage')))

$body

这为我提供了正确的HTTP状态代码和JSON输出,但它在正文中有太多数据。回复如下:

{
  "errorType":"PartialContent",
  "errorCode":206,
  "detailedMessage":"PartialContent Returned",
  "stackTrace":[],
  "data":{
    "output":{
      "status":206,
      "bodyJson":[{"call_date":"2017-08-19 18:17:21"}],
      "headers":{"date":"Thu, 02 Nov 2017 18:36:52 GMT",
                 "server":"Apache",
                 "x-pagination-page-size":10}
    }
  }
}

我希望标题实际上在响应中显示为标题,我希望正文只是bodyJson中的内容

我尝试将身体映射模板更改为使用 $ body.data.output.bodyJson ,但是当我这样做时,身体完全是空的。我还在Header Mappers中设置了标题,同时尝试 integration.response.body.headers.x-pagination-page-size integration.response.header.x-pagination -page-size ,但两次标题都是空白,即使我可以在JSON输出中看到正确的值。

如何将bodyJson元素作为响应的主体输出?我如何正确地映射标题?

1 个答案:

答案 0 :(得分:1)

您是否尝试在集成响应中使用 Lambda Error Regex ?  例如:

  。

* “状态”:400 *

身体测绘模板

#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage')))
{
  "status" : "$errorMessageObj.status",
  "errorType" : "$errorMessageObj.errorType",
  "message" : "$errorMessageObj.errorMessage"
}

我在 Lamda 中创建了错误功能

function error(status, errorType, errorMessage, callback){
    callback(JSON.stringify({
        status: status,
        errorType: errorType,
        errorMessage: errorMessage
    }));
}

用法:

error(404, "Not Found", "Resource is not found", callback);