从 Dynamodb getItem 响应中删除属性值

问题描述 投票:0回答:1

我已使用 AwsIntegration 创建从 API 网关到 DynamoDB 的直接连接。 它有效,但问题是我得到了所有属性值

{
  "Item": {
    "properties": {
      "M": {
        "requireLogin": {
          "BOOL": false
        },

如 M 和 BOOL。我想要返回诸如

{"properties": {"requireLogin": false}}
之类的直接值。 有效负载相当长,并且有不同的类型,如 S、L 等,因此解决方案需要通用 我已经在
VTL
中使用
responseTemplates
尝试了很多不同的标志,但似乎没有任何效果。 我的 CDK 代码如下所示:

    const dynamoIntegration = new AwsIntegration({
      service: 'dynamodb',
      action: 'GetItem',
      options: {
        credentialsRole: apiGatewayRole,
        integrationResponses: [
          {
            statusCode: '200',
          },
          ...errorResponses,
        ],
        requestTemplates: {
          'application/json': JSON.stringify({
            TableName: DELIVERY_TABLE,
            Key: {
              [partitionKey]: {
                S: "$input.params('pagePath')",
              },
            },
          }),
        },
      },
    });
    
    deliveryApi.root.addMethod('GET', dynamoIntegration, {
      apiKeyRequired: !isLocalStack,
      requestParameters: {
        'method.request.querystring.pagePath': true,
      },
      methodResponses: [
        {
          statusCode: '200',
          responseModels: {
            'application/json': deliveryApi.addModel('ResponseModel', {
              contentType: 'application/json',
              modelName: 'ResponseModel',
              schema: {},
            }),
          },
        },
      ],
    });

我有一个解决方案,它通过 lambda 并进行解组,但我想避免这种开销:)

我期待没有任何属性值的响应,如下所示:

{"properties": {"requireLogin": false}}
typescript amazon-dynamodb aws-api-gateway aws-cdk vtl
1个回答
0
投票

您必须使用集成响应映射并手动解组

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-integration-settings-integration-response.html

或者,在客户端使用 DynamoDB 客户端进行解组。

© www.soinside.com 2019 - 2024. All rights reserved.