Sangria-graphql:将 derivedInputObjectType 作为变异参数传入时出错
Posted
技术标签:
【中文标题】Sangria-graphql:将 derivedInputObjectType 作为变异参数传入时出错【英文标题】:Sangria-graphql: error when passing in derivedInputObjectType as an mutation argument 【发布时间】:2018-01-28 18:30:51 【问题描述】:我有以下带有选项字段的案例类:
case class BusinessUserRow(id: String, firstName: Option[String], lastName: Option[String], email: Option[String])
我正在尝试为业务用户对象创建一个 inputType 对象
val BusinessUserInputType =
deriveInputObjectType[BusinessUserRow](
InputObjectTypeName("input"),
InputObjectTypeDescription("A Business user")
)
我想将此 BusinessInputObject 作为参数传递给 addBusinessUser 突变
val businessUserInputArg = Argument("input", BusinessUserInputType)
val Mutation = ObjectType("Mutation", fields[RepoContext, Unit](
Field("addBusinessUser", BusinessUserType,
arguments = businessUserInputArg :: Nil,
resolve = c ⇒ c.ctx.BusinessUserRepo.create(c.arg(businessUserInputArg)))))
但我得到以下编译错误:
Type dao.Tables.BusinessUserRow @@ sangria.marshalling.FromInput.InputObjectResult cannot be used as an input. Please consider defining an implicit instance of `FromInput` for it.
[error] val businessUserInputArg = Argument("input", BusinessUserInputType)
但 BusinessRow 中的所有字段都是标量值。我不明白是什么导致了这个问题。有什么我没有看到吗?
【问题讨论】:
【参考方案1】:谢谢!只需添加这一行就解决了我的问题:
implicit val businessUserFormat = Json.format[BusinessUserRow]
【讨论】:
【参考方案2】:为了反序列化BusinessUserRow
case 类中的输入,您需要提供FromInput[BusinessUserRow]
类型类的实例。你可以在这里找到更多关于它的文档:
http://sangria-graphql.org/learn/#frominput-type-class
因此,例如,如果您使用的是 spray-json,那么您需要为 BusinessUserRow
定义 JsonFormat
【讨论】:
以上是关于Sangria-graphql:将 derivedInputObjectType 作为变异参数传入时出错的主要内容,如果未能解决你的问题,请参考以下文章
了解 GraphQL / Sangria-Graphql 中服务器端的特定字段
为啥不能将 const set<Derived*> 作为 const set<Base*> 传递给函数?