如何避免GraphQL (AWS App Sync)中隐式的 "null "替换?

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

考虑以下查询。

const fetchItemsQuery = `query(
  $paginationPageSize: Int! 
  $paginationPageNumber: Int!
  $searchByNameRequest: String
  $categoryID: String
) {
  getItems(
    paginationPageSize: $paginationPageSize
    paginationPageNumber: $paginationPageNumber
    searchByNameRequest: $searchByNameRequest
    categoryID: $categoryID
  ) {
    // ...
  }
};

如果从客户端提交它与变量,

{
  paginationPageSize: 20,
  paginationPageNumber: 1
}

在AWS App Sync的日志中,它的读数是。

{
  paginationPageSize: 20,
  paginationPageNumber: 1,
  searchByNameRequest: null,
  categoryID: null
}

我检查了来自浏览器的请求有效载荷--没有空,只有... ...

{
  paginationPageSize: 20,
  paginationPageNumber: 1
}

所以原因不在前台方面。

我发现 null 替换 申请解析模板:

{
  "version" : "2017-02-28",
  "operation": "Invoke",
  "payload": {
    "field": "listProduct",
    "arguments": $util.toJson($context.args) // <- here
  }
}

$util.toJson 使用Apache Velocity。

我能否避免 $util.toJson($context.args) 将替换我的请求变量中的空值?

很重要。 解决方案不应触及 明确 提交空值。

amazon-web-services graphql velocity aws-appsync
1个回答
0
投票

你可以尝试过滤掉来自 $context.args 图。

#set( $args = {} )
#foreach( $entry in $context.args.entrySet())
  #if( $entry.value != $null )
    #set( $junk = $args.put($entry.key, $entry.value) )
  #end
#end

{
  "version" : "2017-02-28",
  "operation": "Invoke",
  "payload": {
    "field": "listProduct",
    "arguments": $util.toJson($args)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.