Netflix DGS Codegen+Relay分页无法生成正确DataFetcher类
解决Maven中graphqlcodegen与Netflix DGS Relay分页的类型映射问题
要让graphqlcodegen生成符合Netflix DGS Relay分页要求的Connection<Employee>类型而非自定义的EmployeeConnection,关键是在Maven插件配置中添加类型映射规则,将Schema中生成的Connection/Edge类型映射到DGS提供的泛型类。
具体Maven插件配置
在你的pom.xml的graphql-codegen-maven-plugin配置块中,添加<typeMappings>节点,指定自定义Connection/Edge类型与DGS官方类的映射关系:
<plugin> <groupId>io.github.deweyjose</groupId> <artifactId>graphql-codegen-maven-plugin</artifactId> <version>最新稳定版</version> <!-- 替换为项目实际使用的版本 --> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <!-- 保留原有配置(如schema路径、生成目录等) --> <typeMappings> <!-- 将Schema生成的EmployeeConnection映射到DGS的泛型Connection类 --> <typeMapping> <from>EmployeeConnection</from> <to>com.netflix.graphql.dgs.client.codegen.Connection<Employee></to> </typeMapping> <!-- 同步映射Edge类型,保证分页结构完整性 --> <typeMapping> <from>EmployeeEdge</from> <to>com.netflix.graphql.dgs.client.codegen.Edge<Employee></to> </typeMapping> </typeMappings> </configuration> </execution> </executions> <dependencies> <!-- 引入DGS客户端依赖,确保映射类可被识别 --> <dependency> <groupId>com.netflix.graphql.dgs</groupId> <artifactId>graphql-dgs-client</artifactId> <version>项目DGS版本</version> <!-- 与项目使用的DGS版本保持一致 --> </dependency> </dependencies> </plugin>
配置说明
<from>:对应Schema中@connection指令生成的自定义Connection/Edge类型名(如EmployeeConnection)<to>:指定DGS提供的泛型类,XML中需用<和>替代尖括号<>避免语法错误- 必须同时映射Connection和Edge类型,否则分页结构会生成不完整
验证效果
配置完成后执行mvn clean compile,生成的DataFetcher类中,getEmployeesByPage方法的返回类型会变为Connection<Employee>,完全符合Netflix DGS Relay分页的要求,不再生成自定义的EmployeeConnection类。
内容的提问来源于stack exchange,提问作者Shamsuddin
相关产品推荐
相关产品推荐

