强制不可为null
使用@nonnull指令
因为GraphQL允许非常细粒度的错误处理,并且解析器在执行过程中可能返回不同的字段错误,因此许多GraphQL模式即使在这些字段不发生错误时也不应为null,但仍然暴露了可空字段。
通常情况下,这是relay连接的情况
type FilmConnection {# films is nullable herefilms: [Film]}
Apollo Kotlin 支持 @nonnull 客户端 指令。任何 字段使用 @nonnull 注释的都将使 Kotlin 中的其非空,即使在 GraphQL 模式中它可能是可为空的。下面的 查询:
query AllFilms {allFilms @nonnull {films @nonnull {title @nonnull}}}
将生成以下模型
// All fields are non-nullabledata class Data(val allFilms: AllFilms)data class AllFilms(val films: List<Film?>)data class Film(val title: String)
这样,消费代码在访问标题时不必使用安全调用
val title = data.allFilms.films[0]?.title
(注意:Film
列表中的单个 影片仍然是可为空的,只有 字段本身被设置为非空。
如果你知道每个 FilmConnection
将有一个非空影片字段,为每个 查询这样做将是冗余的。
创建一个 extensions.graphqls
文件,放在你的 schema.[graphqls|sdl|json]
旁边:
# Make the 'film' field always non-nullableextend type FilmConnection @nonnull(fields: "films")