amplifyで@searchディレクティブを付けたテーブルのnextToken指定のアクセスでエラーになった時の対処法
amplifyであるテーブルに関する検索機能を付けたい場合、@searchディレクティブを付けると便利ですよね。
検索結果を部分的にロードしてページングしたく、limitとnextTokenを付けてリクエストしたら、以下のような応答が返ってきて、2回目以降のクエリがエラーになりました。
{
"data": {
"searchImages": null
},
"errors": [
{
"message": "Unable to convert \n \n \n {\n \"version\": \"2018-05-29\",\n \"operation\": \"GET\",\n \"path\": \"/image/_search\",\n \"params\": {\n \"body\": {\n \"search_after\": , \"size\": 20 ,\n \"sort\": [{\"good\": {\"order\":\"desc\"}}, {\"id.keyword\": {\"order\":\"desc\"}}],\n \"version\": false,\n \"query\": {\"match_all\":{}},\n \"aggs\": {}\n }\n }\n} to class com.amazonaws.deepdish.transform.model.lambda.LambdaVersionedConfig.",
"errorType": "MappingTemplate",
"data": null,
"errorInfo": null,
"path": [
"searchImages"
],
"locations": [
{
"line": 2,
"column": 3,
"sourceName": "GraphQL request"
}
]
}
]
}
自動生成リゾルバを確認したら、以下のBase64デコードした文字が空文字になっていることがわかりました。(上記errorsのsearch_afterの値)
$util.base64Decode($args.nextToken)
以下のようにしたら、解消しました。
$util.base64Decode($args.nextToken.toString())
$args.nextTokenの型はStringじゃないのかな?
細かいところは不明ですが、とりあえず解消したので、めでたしめでたし。