我已使用 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}}
您必须使用集成响应映射并手动解组
或者,在客户端使用 DynamoDB 客户端进行解组。