GraphQL-java-tools:空参数与不存在参数



如何在java graphQL中区分参数是否显式设置为null,或者根本没有提供?

尝试实现的用例如下:我有这样的突变

updateUser(id:Int!, changes:UserChanges!)
#where UserChanges is defined as:
type UserChanges {
    login:String
    email:String
    #etc

}

这里的想法是用户只提供他想要更改的字段(例如 react setState(。因此,如果省略电子邮件,我想保持原样。

但是,如果他/她想明确将电子邮件设置为 null 怎么办?有什么办法从我的解析器方法中找出这一点并采取相应的行动?

(我使用 graphql-java-tools 库(

我找到了答案。如果有人需要它:graphql.schema.DataFetchingEnvironment的实例可用于每个解析器方法。

这提供了像getArguments((,hasArgument((等方法。使用这些方法,我们可以确定参数是否显式设置为 null,或者是否根本没有提供。

看起来查询/变量的反序列化是由 fasterxml Jackson 处理的,这是处理该问题的合适位置,否则它会变得太复杂:检查每个字段? 嵌套?

所以:UserChanges.java 应该看起来像这样:

class UserChanges {
// SHOULD NOT HAVE ALL ARGUMENT CONSTRUCTOR!
 Optional<String> login;
 Optional<String> email;
 ... getters & setters
}

在这种情况下,反序列化程序将使用 SETTERS,仅适用于提供的字段!{"login":null}将成为:

UserChanges.login = Optional.empty
UserChanges.email = null

相关内容

  • 没有找到相关文章

最新更新