【问题标题】:Appsync response mapping template json key name changeAppsync 响应映射模板 json 键名更改
【发布时间】:2019-01-05 14:19:44
【问题描述】:

在 aws appsync 响应映射模板中更改 json 响应键值的正确方法是什么?

我得到的 JSON 如下所示:

{
  "tenant_id": 1,
  "id": "bd8ce6a8-8532-47ec-8b7f-dcd1f1603320",
  "header": "Header name",
  "visible": true
}

我想传递的是

{
  "tenantId": 1,
  "id": "bd8ce6a8-8532-47ec-8b7f-dcd1f1603320",
  "header": "Header name",
  "visible": true
}

Schema 需要以tenantID 形式的租户ID,而lambda 以tenant_id 的形式返回它。我可以在 lambda 中更改它,但我想知道如何在响应映射模板中进行更改。

【问题讨论】:

    标签: amazon-web-services aws-appsync


    【解决方案1】:

    您可以通过您正在解析的字段的响应映射模板执行此操作,方法如下:

    考虑将来自您的 lambda 的 JSON 响应存储在 response 变量中,然后您可以返回类似这样的内容。

    $#set($result = {
     "tenantId": ${response.tenant_id},
     "id": "${response.id}",
     "header": "${response.header}",
     "visible": $response.visible
    })
    
    $util.toJson($result)
    

    或者,您还可以通过设置tenantId 字段(例如#set( $response.tenantId = $response.tenant_id ))来改变您对 lambda 的响应。如果您仍然遇到问题,请告诉我。

    谢谢, 尚卡尔

    【讨论】:

    • 我最终在 lambda 处理程序中使用了 Lodash mapKeys 和 cameCase 方法,因此我可以在一个地方为所有 GraphQL 查询执行此操作。但是对于特殊情况,了解响应映射方式也很有用。谢谢!
    • 我想对来自 DynamoDB 而不是 lambda 的响应做类似的事情。由于未知原因,您的第二个解决方案#set( $ctx.result.newkey = $ctx.result.oldkey)(我更喜欢它,因为它使其余数据保持不变)不起作用(我的新密钥始终为空)。所以我实现了第一个,它就像一个魅力。谢谢:)
    猜你喜欢
    • 2019-07-19
    • 2020-02-17
    • 2020-04-22
    • 2020-01-28
    • 2022-01-23
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多