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

Kotlin Apollo Client与GraphQL:重命名自动生成类及类复用问询

解决Apollo Client Kotlin生成重复MetaData类的问题

一、避免自动生成带数字后缀的类名

Apollo Client默认会给重复的嵌套类型添加数字后缀(比如MetaData1),你可以通过配置命名规则来阻止这种行为:

在项目的build.gradle.kts(Groovy项目用build.gradle)的Apollo配置块中,设置typeNaming策略,强制保留类型的原始SDL名称,不管它属于哪个父类型:

apollo {
    service("yourServiceName") {
        packageName.set("com.your.package")
        codegen {
            // 保留SDL中定义的类型名称,避免自动加数字
            typeNaming.set(TypeNaming.Preserve)
        }
    }
}

如果需要更灵活的命名逻辑,也可以自定义TypeNaming实现,比如始终用类型的SDL名称作为生成类的名字:

apollo {
    service("yourServiceName") {
        packageName.set("com.your.package")
        codegen {
            typeNaming.set(object : TypeNaming {
                override fun name(type: Type): String {
                    // 直接返回SDL中定义的类型名
                    return type.sdlName
                }
            })
        }
    }
}

二、复用同一个MetaData类

要彻底让Car和Person复用同一个类,最优方案是从GraphQL Schema层面统一定义:

1. 统一Schema中的类型定义

如果原来的Schema里,Car和Person的MetaData是各自内嵌的匿名/独立类型,把它提取成顶层公共类型,让两个父类型都引用它:

修改前的Schema:

type Car {
    id: ID!
    metaData: {
        createdAt: String!
        updatedAt: String!
    }
}

type Person {
    id: ID!
    metaData: {
        createdAt: String!
        updatedAt: String!
    }
}

修改后的Schema:

// 提取为公共顶层类型
type MetaData {
    createdAt: String!
    updatedAt: String!
}

type Car {
    id: ID!
    metaData: MetaData!
}

type Person {
    id: ID!
    metaData: MetaData!
}

这样Apollo Client生成代码时,会自动生成一个MetaData类,Car和Person的metaData属性都会引用这个类,完全复用。

2. 无法修改Schema时的替代方案

如果不能调整Schema,可以通过typeMapping配置,将两个嵌套类型映射到同一个Kotlin类:

apollo {
    service("yourServiceName") {
        packageName.set("com.your.package")
        // 将Car和Person的metaData类型都映射到同一个自定义类
        typeMapping.set(mapOf(
            "Car.metaData" to "com.your.package.MetaData",
            "Person.metaData" to "com.your.package.MetaData"
        ))
    }
}

注意:这种方式需要你手动创建MetaData类,或者确保生成的类名称一致后再做映射。


内容的提问来源于stack exchange,提问作者padmalcom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:36:24