Graphiql 中标记为非空的所有字段和参数:Sangria,scala

Posted

技术标签:

【中文标题】Graphiql 中标记为非空的所有字段和参数:Sangria,scala【英文标题】:All fields and parameters marked as non-null in Graphiql : Sangria, scala 【发布时间】:2020-08-24 06:45:07 【问题描述】:

我无法使用 postman 来查询使用 scala 编写的 graphql 服务器,该服务器使用它的 sangria 库。 如果我将内容类型用作“application-json”并且如果我使用纯文本,我会在邮递员中收到格式错误的请求错误,我会得到不支持的内容类型。我使用的邮递员版本是 6.2.4 版。 代码非常简单,我从 hbase 读取数据。我使用 sangria 宏函数 deriveObjectTypeUnit, myCaseClass 来定义一个对象。 但是,我可以通过将 graphiql.html 文件从资源连接到创建的路由来使用 graphiql 控制台。 graphiql 控制台的问题在于,它将所有参数和字段标记为不可为空,默认情况下,这些字段在 graphql 中都可以为空。我从 graphiql 控制台的文档选项卡中检查了这一点,在那里我可以看到我的所有字段,并且参数被标记为不可为空(后缀有感叹号 )。 查询示例如下:


  hBaseTable(date: "2019-11-21", key: "10100003071234") 
    RowKey
    DateOfInt
  

我的问题是我们如何在 sangria 中设置默认的可空性以及 graphql java 如何支持 postman 版本 6 但不支持 scala 实现。

【问题讨论】:

【参考方案1】:

默认情况下,GraphQL 模式中的字段可能可以为空,但在 Scala 中,nulls 几乎总是编程错误(当然,如果您将它们作为参数传递或返回,则肯定总是) - 您想要可空,您可以使用 Option 显式建模它们.如果您想遵守 GraphQL 约定,只需将案例类中的所有字段都写为 Optional。

【讨论】:

我将尝试将字段和参数标记为选项。但是与java实现类似,只有当我们想要将字段标记为不可为空时,我们是否有类似在.graphqls文件中的字段类型(例如column:String!)中添加感叹号的东西。也不应该像java和GraphQl的其他实现一样默认所有字段都可以为空。除了模式规范对象之外,是否有另一种定义模式的方法?使用 .graphqls 文件模式要容易得多。谢谢! 在 Scala 中,没有人认为该字段可以为空。 nulls 基本上只在与 Java 交互时使用,因此没有人在构建工具时会考虑“默认为空”。 您可以从代码 (github.com/muuki88/sbt-graphql) 生成架构,但我不知道反过来做。 谢谢@Mateusz!!!将字段标记为选项确实有效。我现在确实在响应中得到了所需的空值。但是,graphiql 控制台模式如何仍然将这些字段显示为不可为空,并且仍然在响应中发送空值。

以上是关于Graphiql 中标记为非空的所有字段和参数:Sangria,scala的主要内容,如果未能解决你的问题,请参考以下文章

IllegalArgumentException:指定为非空的参数为空

java.lang.IllegalArgumentException:指定为非空的参数为空:方法 kotlin.jvm.internal.Intrinsics.checkParameterIsNotN

Gatsby graphiQL - 不能为不可为空的字段 ImageSharpFluid.src 返回 null

错误 #2007:参数文本必须为非空

java.security.InvalidAlgorithmParameterException:Linux上的trustAnchors参数必须为非空,或者为啥默认的信任库为空[重复]

oracle怎么校验字段是不是为非空约束