GraphQL-Java加载多.graphqls文件仅暴露最后一个Query的问题排查
问题原因与解决方案
嘿,我来帮你搞定这个问题~你遇到的情况是GraphQL规范和GraphQL-Java解析机制导致的:
核心错误原因
GraphQL要求整个Schema只能存在一个唯一的Query根类型。你现在在两个.graphqls文件里分别定义了独立的type Query,当SchemaParser解析这些文件时,后加载的Query类型(也就是B.graphqls里的)会直接覆盖前面定义的,所以最终只有queryThree能被服务器暴露出来。
快速修复方案(推荐)
使用GraphQL的类型扩展语法(extend type)来拆分定义根类型字段,这样就能实现模块化的同时合并所有根字段。
修改你的B.graphqls文件,把独立的type Query改成扩展:
extend type Query{ queryThree(param : Param, param1 : Param1) : ResponseThree }
A.graphqls保持原来的定义不变:
type Query{ queryOne(param : Param) : ResponseOne queryTwo(param : Param) : ResponseTwo }
这样SchemaParser在解析时,会自动把extend type Query里的字段合并到基础的Query类型中,最终你的Schema会包含queryOne、queryTwo和queryThree三个查询字段,全部都能正常访问。
额外提醒
这个规则同样适用于Mutation和Subscription根类型——如果需要在多个文件中拆分定义这些根类型的字段,都要使用extend type语法,避免出现覆盖问题。
你的加载代码不需要做任何修改,保持原来的写法就可以正常工作啦~
内容的提问来源于stack exchange,提问作者KrishnaFJ
相关产品推荐
相关产品推荐

