You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:28:15