【问题标题】:How do I map a value from the method request body into an API gateway mapping template?如何将方法请求正文中的值映射到 API 网关映射模板?
【发布时间】:2021-01-14 23:38:03
【问题描述】:

我有一个用 Java 编写的 lambda,它接受结构的请求对象

{
  "id": "1",
  "value": "foobar"
}

当我通过带有这样一个对象的测试接口调用这个 Lambda 时,它工作正常。

我想创建一个 API,其中 PUT 请求到 /items/1(即/items/{id} 的形式),请求正文为

{
  "value": "foobar"
}

调用这个 Lambda。

我已经适当地创建了 API 资源items{id}

我创建了PUT 方法(在/items/{id} 上)并将其与 lambda 关联。

我创建了一个映射模板,将id 从路径映射到对象。

{
  "id": "$method.request.path.id"
}

但是,如何将请求正文中的value 映射到模板中,以便获得表单的集成请求

{
  "id": "1",  // came from path
  "value": "foobar" // came from HTTP request body
}

如何实现这种映射?

【问题讨论】:

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


    【解决方案1】:

    试试这个application/json映射模板:

    {
     "id": "$method.request.path.id",
     "body" : $input.json('$')
    }
    

    然后在你的 lambda 中:console.log(event.body)

    API Gateway mapping template and access logging variable reference

    【讨论】:

    • 这对我不起作用,因为事件的形式必须是 { id, value },而不是 { id, body.value }
    • 这是一个如何使用$input.json('$') 读取body 的示例。我看到您在解决方案中使用了它。
    【解决方案2】:

    我发现这个在模板中有效。

    #set($inputRoot = $input.path('$')) 
    {
      "id": "$method.request.path.id",
      "value": $inputRoot.value
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-20
      • 1970-01-01
      • 2018-07-31
      • 2019-07-11
      • 1970-01-01
      • 2020-03-31
      • 2017-11-30
      • 2016-05-23
      • 1970-01-01
      相关资源
      最近更新 更多