API网关主体映射器嵌套对象

时间:2016-10-24 02:06:14

标签: amazon-dynamodb aws-api-gateway

我在API网关上设置了一个直接与DynamoDB对话的端点设置。

当发出帖子请求时,我使用body mapper脚本将我的url请求参数映射到dynamoDB params。

我的网址参数

{
  "name": "sdaf",
  "location": "asdf",
  "gender": "male"
}

Body Mapper脚本

{ 
  "TableName": "sample-table",
  "Item": {
    "firstName": {
        "S": "$input.path('$.name')"
    },
    "location": {
        "S": "$input.path('$.location')"
    }
  }
}

所有这一切都很好,直到我必须将整个对象写入发电机。

新网址参数

{
  "name": "sdaf",
  "location": "asdf",
  "gender": "male",
  "hobbies": {
    "hobby1": {
      "startedAt": "<some time>" 
    },
    "hobby2": {
      "startedAt": "<some time>" 
    },
  }
}

我不确定身体映射器应该如何看待这种情况? 我试过这个:

Body Mapper

{ 
  "TableName": "sample-table",
  "Item": {
    "firstName": {
        "S": "$input.path('$.name')"
    },
    "location": {
        "S": "$input.path('$.location')"
    },
    "hobbies": {
        "M": "$input.path('$.hobbies')"
    }
  }
}

但是没有用。我想知道是否有办法直接从api网关将对象转储到dynamo中的列。我知道这可以在两者之间添加一个lambda,但我想避免这种情况。

1 个答案:

答案 0 :(得分:0)

我不认为这可以在将爱好作为网址参数传递时发挥作用。

如果你在体内传递爱好,你可以这样做:

"M": {
#foreach( $elem in $input.path('$.hobbies'))
      $elem
  #if($foreach.hasNext),#end
#end
      }