Я пытаюсь использовать запрос с фильтром:
query queryPitchesByApprovedIndex($approved: Boolean = true) {
queryPitchesByApprovedIndex(approved: $approved) {
items {
id
}
}
}
Шаблон сопоставления, созданный AppSync, выглядит так:
{
"version": "2017-02-28",
"operation": "Query",
"query": {
"expression": "#approved = :approved",
"expressionNames": {
"#approved": "approved",
},
"expressionValues": {
":approved": {"B": $util.dynamodb.toBinary($ctx.args.approved)},
},
},
"index": "approved-index",
"limit": $util.defaultIfNull($ctx.args.first, 20),
"nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.after, null)),
"scanIndexForward": true,
"select": "ALL_ATTRIBUTES",
}
Ошибка, которую я получаю:
Unable to parse the JSON document: 'Unrecognized token '$util': was expecting ('true', 'false' or 'null')\n at [Source: (String)\"{\n \"version\": \"2017-02-28\",\n \"operation\": \"Query\",\n \"query\": {\n \"expression\": \"#approved = :approved\",\n \"expressionNames\": {\n \"#approved\": \"approved\",\n },\n \"expressionValues\": {\n \":approved\": {\"B\": $util.dynamodb.toBinary($ctx.args.approved)},\n },\n },\n \"index\": \"approved-index\",\n \"limit\": 20,\n \"nextToken\": null,\n \"scanIndexForward\": true,\n \"select\": \"ALL_ATTRIBUTES\",\n}\"; line: 10, column: 31]'
Любая идея, как я могу это исправить?





$util.dynamodb.toBinary(String data) принимает String в качестве входных данных, но вы передаете Boolean, и поэтому он не проходит оценку.
Это хороший отзыв, я уточню у команды, можно ли сделать утилиту более снисходительной, а также взять логическое значение $util.dynamodb.toBinary(Boolean data)
Вот возможный обходной путь:
#if ($ctx.args.approved)
#set($approved = $util.dynamodb.toBinaryJson("true"))
#else
#set($approved = $util.dynamodb.toBinaryJson("false"))
#end
{
"version": "2017-02-28",
"operation": "Query",
"query": {
"expression": "#approved = :approved",
"expressionNames": {
"#approved": "approved",
},
"expressionValues": {
":approved": $approved
},
},
"index": "approved-index",
"limit": $util.defaultIfNull($ctx.args.first, 20),
"nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.after, null)),
"scanIndexForward": true,
"select": "ALL_ATTRIBUTES",
}
Извините, я слишком быстро прочитал ваш вопрос. В Velocity есть несколько интересных способов обработки логического типа. Я отредактировал свой ответ.
Все равно не повезло. Это работает:
"expressionValues": { ":approved": {"B": "true"}, }, и я бы подумал, что{"B": "${$ctx.args.approved}"}или$util.dynamodb.toBinary(Boolean.toString($ctx.args.approved))могут помочь, но нет. Последнее дает «Обнаружено \»),\\n },\\n },\\n \\\"индекс\\\": \\\"утвержденный индекс\\\",\\n \\\ "limit\\\": \" со скоростью[строка 10, столбец 80]\nОжидается одно из:\n \"[\" ...\n \",\" ...\n \")\ "...\n <ПРОБЕЛ> ...\n"