如果参数显式设置为null,或者根本没有提供参数,我如何区分java graphQL?
我尝试实现的用例如下:我有这样的突变
updateUser(id:Int!, changes:UserChanges!)
#where UserChanges is defined as:
type UserChanges {
login:String
email:String
#etc
}
这里的想法是用户只提供他想要改变的字段(比如反应setState)。 因此,如果电子邮件被忽略,我想保持不变。
但是如果他/她想明确将电子邮件设置为null呢? 有没有办法通过我的解析器方法解决这个问题并采取相应行动?
(我使用graphql-java-tools库)
答案 0 :(得分:0)
我找到了答案。如果有人需要它: 每个解析器方法都可以使用graphql.schema.DataFetchingEnvironment的一个实例。
这提供了getArguments(),hasArgument()等方法。 使用这些方法,我们可以找出一个参数是否为null的显式设置,或者根本没有提供它。
答案 1 :(得分:0)
看起来像来自查询/变量的反序列化是由fastxml Jackson处理的,这是处理此问题的适当位置,否则它变得太复杂了:检查每个字段?嵌套?
因此:UserChanges.java应该如下所示:
class UserChanges {
// SHOULD NOT HAVE ALL ARGUMENT CONSTRUCTOR!
Optional<String> login;
Optional<String> email;
... getters & setters
}
在这种情况下,反序列化器将使用二传手,仅用于提供的字段!
而{"login":null}
将变为:
UserChanges.login = Optional.empty
UserChanges.email = null