AppSync VTL响应映射器出现解析错误,请求排查与解决
AppSync VTL响应映射器解析错误排查与修复
错误原因
- JSON尾逗号语法违规:VTL的JSON解析器严格遵循标准JSON语法,不允许对象最后一个键值对末尾保留逗号。你的代码中第8行
"endsAt": $ctx.result.availability.endsAt,末尾的逗号触发了语法错误,导致解析器在第9行遇到}时无法匹配预期的语法结构。 - 输出逻辑重复问题:当前代码无论
$isAdmin是否为true,最终都会执行$util.toJson($ctx.result)。如果是非admin用户,会先后输出两个JSON字符串,直接导致响应格式非法(JSON不允许多个顶级对象)。
解决方法
步骤1:移除多余的尾逗号
删除"endsAt"行末尾的逗号,修正后的JSON结构如下:
$util.toJson({ "availability": { "startsAt": $ctx.result.availability.startsAt, "endsAt": $ctx.result.availability.endsAt } })
步骤2:修正输出逻辑,避免重复JSON
使用#else分支区分admin与非admin的输出,确保每次仅输出单个合法JSON:
#set($isAdmin = $ctx.identity.resolverContext.is_admin) #if(!$isAdmin) $util.toJson({ "availability": { "startsAt": $ctx.result.availability.startsAt, "endsAt": $ctx.result.availability.endsAt } }) #else $util.toJson($ctx.result) #end
内容的提问来源于stack exchange,提问作者jordan
相关产品推荐
相关产品推荐

