首页 > 解决方案 > 使用 `$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)"
  }
}

标签: amazon-dynamodbaws-amplifyaws-appsyncaws-amplify-cli

解决方案


我可以这样修复它:

#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))

不适合我吗?


推荐阅读