簡體   English   中英

graphql-java-tools:空參數與不存在參數

[英]graphql-java-tools: null parameter vs not present parameter

如果參數被顯式設置為 null,或者根本沒有提供,我如何在 java graphQL 中區分?

我嘗試實現的用例如下:我有這樣的突變

updateUser(id:Int!, changes:UserChanges!)

#where UserChanges is defined as:
type UserChanges {
    login:String
    email:String
    #etc

}

這里的想法是用戶只提供他想要更改的字段(例如 react setState)。 因此,如果省略了電子郵件,我想保持不變。

但是,如果他/她想明確地將 email 設置為 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
}

在這種情況下,反序列化器將使用設置器,僅用於提供的字段! {"login":null}將變為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM