在AppSync中,验证错误不会触发响应映射模板中的错误处理程序。而是直接返回验证错误给客户端。要解决这个问题,您可以在请求处理程序中手动进行错误处理,并返回自定义的错误响应。
以下是一个示例解决方案,假设您正在使用AWS Lambda作为AppSync的数据源:
在Lambda函数中,您可以使用try-catch块来捕获验证错误并返回自定义的错误响应。您可以在try块中编写主要的业务逻辑,然后在catch块中处理验证错误。
def lambda_handler(event, context):
try:
# 主要业务逻辑
# ...
return {
'statusCode': 200,
'body': 'Success'
}
except ValidationError as e:
# 处理验证错误
error_message = str(e) # 获取验证错误的消息
return {
'statusCode': 400,
'body': error_message
}
在AppSync中,您可以创建一个自定义的响应模板来处理Lambda函数返回的错误响应。在AppSync控制台的Schema配置中,找到相应的resolver,然后在"Response mapping template"字段中编写自定义的响应模板。
# 自定义响应模板
# $context.result是Lambda函数返回的结果
# $context.result.statusCode是Lambda函数返回的状态码
# $context.result.body是Lambda函数返回的响应体
# $util.error()函数用于返回错误响应
# $util.escapeJavaScript()函数用于转义响应体中的特殊字符
$util.error(
$util.parseJson($context.result.body),
$util.escapeJavaScript($context.result.statusCode)
)
注意:要使用自定义的响应模板,您需要将AppSync的Resolver的"Template type"设置为"Response Mapping Template"。
通过以上方法,您可以在Lambda函数中手动处理验证错误,并返回自定义的错误响应给客户端。这样,您可以在响应映射模板中对错误进行自定义处理。