如何通过一个AppSync向另一个AppSync发送AWSJSON类型的JSON数据?
解决AppSync跨端点调用中AWSJSON字段的解析问题
问题核心
从一个AppSync向另一个AppSync的GraphQL端点发起请求时,data字段(类型为AWSJSON)的序列化与转义处理错误,导致查询解析失败或类型不匹配。
正确解决方案
修正后的VTL请求映射模板
{ "version": "2018-05-29", "method": "POST", "resourcePath": "/graphql", "params": { "body": { "query": "mutation MyMutation { createcase(input: {caseid: \"$ctx.args.input.caseid\", subjectid: \"$ctx.args.input.subjectid\", data: \"$util.escapeJavaScript($util.toJson($ctx.args.input.data))\"}) { caseid subjectid data } }" }, "headers": { "Authorization": "$ctx.request.headers.Authorization", "Content-Type": "application/json" } } }
关键修正点
修正GraphQL字段名:
原模板错误使用输入类型名CreatecaseInput作为mutation字段,实际schema定义的mutation字段是createcase,这是导致查询解析失败的核心原因之一。正确处理AWSJSON序列化:
$util.toJson($ctx.args.input.data):将AppSync自动解析后的data对象转回JSON字符串$util.escapeJavaScript():转义字符串中的双引号,避免破坏外层JSON结构,确保生成的GraphQL查询字符串合法
符合GraphQL语法规范:
移除了参数名input周围的单引号,GraphQL参数名不需要引号包裹。
错误原因分析
- 字段名错误:所有尝试的模板均误用输入类型名作为mutation字段,直接触发
MalformedHttpRequestException。 - 引号转义失效:未对嵌套JSON字符串的双引号做转义处理,导致外层JSON结构被破坏(如格式2、4、5的语法错误)。
- 类型不匹配:直接传入对象或未转义的字符串,不符合
AWSJSON类型需要传入转义后JSON字符串的要求(如格式1、3的类型验证错误)。
内容的提问来源于stack exchange,提问作者user20942942
相关产品推荐
相关产品推荐

