使用 `$utils.defaultIfNullOrEmpty` 来保存布尔值

问题描述

用户不发送 $context.arguments.input.isActive 时,我将此 null 值替换为认值,如下所示:

#set($isActive = $utils.defaultIfNullOrEmpty($context.arguments.input.isActive,true))

但由于某种原因,这个 isActive 被保存为 null

例如:

我在 schema.graphql 中定义了这个突变:

type Mutation {
  updateAccount(input: AccountInput!): Boolean
    @aws_auth(cognito_groups: ["SuperAdmin"])
}

input AccountInput {
  id: ID!
  name: String!
  picture: String!
  isActive: Boolean
}

所以,当用户不发送 isActive 时,像这样:

mutation {
  updateAccount(input: {
    id: "xxxxx"
    name: "xxxxx"
    picture: "public/xxxxx/xxxxxx.jpg"
  })
}

isActive 值保存为 null。并应保存为 true

这是updateAccount的解析器的完整代码

#set($id = $context.arguments.input.id)
#set($currentDate = $utils.time.NowISO8601())

#set($isActive = $utils.defaultIfNullOrEmpty($context.arguments.input.isActive,true))

{
  "version": "2018-05-29","operation": "UpdateItem","key": {
    "id": $utils.dynamodb.toDynamoDBJson($id)
  },"update": {
    "expression": "SET #name = :name,#picture = :picture,#isActive = :isActive,#updatedAt = :updatedAt","expressionNames": {
      "#name": "name","#picture": "picture","#isActive": "isActive","#updatedAt": "updatedAt"
    },"expressionValues": {
      ":name": $utils.dynamodb.toDynamoDBJson($context.arguments.input.name),":picture": $utils.dynamodb.toDynamoDBJson($context.arguments.input.picture),":isActive": $utils.dynamodb.toDynamoDBJson($isActive),":updatedAt": $util.dynamodb.toDynamoDBJson($currentDate)
    }
  },"condition": {
    "expression": "attribute_exists(id)"
  }
}

解决方法

我可以这样解决:

#set($isActive = true)

#if(!$utils.isNull($context.arguments.input.isActive))
  #set($isActive = $context.arguments.input.isActive)
#end

但是为什么:

#set($isActive = $utils.defaultIfNullOrEmpty($context.arguments.input.isActive,true))

对我不起作用?