Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 集成响应中的AWS API网关标头和正文映射_Json_Amazon Web Services_Aws Lambda_Aws Api Gateway - Fatal编程技术网

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

Json 集成响应中的AWS API网关标头和正文映射,json,amazon-web-services,aws-lambda,aws-api-gateway,Json,Amazon Web Services,Aws Lambda,Aws Api Gateway,我正在尝试在API网关端点的集成响应中正确设置主体映射和头映射 在我们的Lambda中,我们有 if (response.statusCode == 200) { context.succeed(output); } else if (response.statusCode == 206) { var paginationObject = { errorType : "PartialContent", errorCode : 206,

我正在尝试在API网关端点的集成响应中正确设置主体映射和头映射

在我们的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));
}
然后,我在集成响应中使用Lambda Error Regex*PartialContent.*处理获取此内容,并将我的身体映射模板作为

#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映射模板更改为使用$body.data.output.bodyJson,但当我这样做时,body完全为空。我还在头映射器中设置了头,尝试了integration.response.body.headers.x-pagination-page-sizeintegration.response.Header.x-pagination-page-size,但这两次头都是空的,尽管我可以在JSON输出中看到正确的值


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

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

*“状态”:400*

主体映射模板

#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage')))
{
  "status" : "$errorMessageObj.status",
  "errorType" : "$errorMessageObj.errorType",
  "message" : "$errorMessageObj.errorMessage"
}
function error(status, errorType, errorMessage, callback){
    callback(JSON.stringify({
        status: status,
        errorType: errorType,
        errorMessage: errorMessage
    }));
}
我在我的Lamda中创建了一个错误函数:

#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage')))
{
  "status" : "$errorMessageObj.status",
  "errorType" : "$errorMessageObj.errorType",
  "message" : "$errorMessageObj.errorMessage"
}
function error(status, errorType, errorMessage, callback){
    callback(JSON.stringify({
        status: status,
        errorType: errorType,
        errorMessage: errorMessage
    }));
}
用法:

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

$body.data.output.bodyJson是一个数组,根据用例的不同,您可以迭代bodyJson数组中的所有映射并合并它们(如果是这种情况,则返回数组中的第一个映射);或者您可以执行{body:$body.data.output.bodyJson};后者将返回类似于{“body”:[{“call_date”:“2017-08-19 18:17:21”}]的映射