apollo-client-maven-plugin:如何在生成模型中扁平化GraphQL片段
解决Apollo Java Client中GraphQL片段嵌套包装的问题
针对你使用apollo-client-maven-plugin 7.1.0时遇到的片段字段被嵌套在authenticationFragment对象中的问题,可通过以下方式解决:
1. 在片段引用处添加扁平化注解
修改你的GraphQL查询,在片段引用上添加@graphql(flatten = true)注解,强制将片段字段直接合并到父对象中:
fragment AuthenticationFragment on SessionInfo { role sessionGUID token } mutation loginAsGuest { login( lang: { key: "FRA" } ) { ...AuthenticationFragment @graphql(flatten = true) } }
2. 确认插件flattenModels配置的正确性
你提到已启用flattenModels但未生效,需检查Maven插件配置是否正确关联到代码生成逻辑。确保flattenModels配置在codegen的generateModels块下:
<plugin> <groupId>com.apollographql.apollo</groupId> <artifactId>apollo-client-maven-plugin</artifactId> <version>7.1.0</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <generateModels> <flattenModels>true</flattenModels> </generateModels> <!-- 其他配置项 --> </configuration> </execution> </executions> </plugin>
注:全局flattenModels配置对片段的处理优先级低于片段级别的@graphql(flatten = true)注解,优先推荐第一种方式精准控制扁平化范围。
另外,role字段出现rawValue是Apollo Java对枚举类型的默认封装行为,若想直接获取字符串值,可在插件配置中启用enumAsModel,或在代码中通过role.rawValue()提取对应值。
内容的提问来源于stack exchange,提问作者Denis Cucchietti
相关产品推荐
相关产品推荐

