【发布时间】:2020-10-12 13:13:11
【问题描述】:
问题:如何在我的 Appsync 速度模板中为 SQL 语句字符串化 JSON 对象?
说明:我有一个 Aurora RDS 表,其中有一列数据类型为 JSON。 AppSync API 已连接到 RDS。 我的 GraphQL 架构看起来像
input CreateServiceCatalogItemInput {
serviceName: String!
serviceConfig: ServiceConfigInput!
}
type Mutation {
createServiceCatalogItem(input: CreateServiceCatalogItemInput!): ServiceCatalogItem
}
type Query {
getAllServiceCatalogItem: [ServiceCatalogItem]
}
type ServiceCatalogItem {
serviceId: ID!
serviceName: String!
serviceConfig: ServiceConfig!
}
type ServiceConfig {
connectionType: String
capacity: Int
}
input ServiceConfigInput {
connectionType: String
capacity: Int
}
schema {
query: Query
mutation: Mutation
}
我的 createServiceCatalogItem 突变解析器看起来像
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$util.toString($ctx.args.input.serviceConfig)') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
这引发了我的错误:
在 com.amazonaws.deepdish.transform.util.TransformUtils 类中调用方法 'toString' 抛出异常 java.lang.IllegalArgumentException: wrong number of arguments at ...
如果我这样做:
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$util.toJson($ctx.args.input.serviceConfig)') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
这引发了我的错误:
无法解析 JSON 文档:'Unexpected character ('c' (code 99)): was Expecting comma to split Array entries\n at ...
如果我这样做:
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$ctx.args.input.serviceConfig') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
然后我得到一个有道理的错误:
RDSHttp:{"message":"错误:json 类型的输入语法无效\n 详细信息:令牌 \"connectionType\" 无效。\n 位置:222\n 其中:JSON 数据,第 1 行: {connectionType..."}
但是,当我在解析器中对 JSON 进行硬编码时,它可以工作:
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '{\"connectionType\":\"ftth\",\"capacity\":1}') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
那么如何将 {connectionType=ftth, capacity=1} 转换为 {"connectionType":"ftth", "capacity":1}?我做错了什么或者我错过了什么?任何帮助将不胜感激。
【问题讨论】:
标签: graphql velocity aws-appsync