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

如何在Android Kotlin项目的OpenAPI Generator中忽略无指定类型的字段生成

如何在Android Kotlin项目的OpenAPI Generator中忽略无指定类型的字段生成

嘿,我之前也踩过这个坑!用OpenAPI Generator结合kotlinx.serialization生成模型时,碰到additionalProperties: true的字段会生成kotlin.Any?类型的属性,后续序列化时直接报错。用Mustache模板修改确实是解决办法,我来一步步给你说怎么操作:

  • 第一步:导出默认模板到本地
    如果你是用Gradle插件调用OpenAPI Generator的话,可以先把官方的Kotlinx Serialization模板导出到项目里,方便修改。执行这条Gradle命令:

    ./gradlew openApiGenerate --export-template-dir src/main/resources/openapi-templates
    

    导出后,在src/main/resources/openapi-templates里找到kotlinx-serialization/model.mustache文件,这就是控制数据类生成的核心模板。

  • 第二步:修改模板,排除additionalProperties字段
    打开model.mustache,找到遍历生成属性的那段代码(大概是模板里处理vars的部分),原来的代码会生成所有属性,我们要加个判断,跳过那些属于additionalProperties的字段。

    把原来的属性生成块改成这样:

    {{#vars}}
    {{^isAdditionalProperties}}
    {{#isNullable}}@Optional{{/isNullable}}
    @SerialName("{{name}}")
    val {{fieldName}}: {{datatype}}{{#isNullable}}?{{/isNullable}} = {{defaultValue}},
    {{/isAdditionalProperties}}
    {{/vars}}
    

    这里的{{^isAdditionalProperties}}是反向判断,意思是只有当该属性不是additionalProperties时才生成代码,完美跳过你说的delivery_data这类字段。

    注意:有些版本的OpenAPI Generator里,判断变量可能是additionalProperties而不是isAdditionalProperties,如果上面的写法没生效,可以换成{{^additionalProperties}}试试。

  • 第三步:配置Generator使用自定义模板
    回到你的Gradle配置,在openApiGenerate任务里指定模板目录,让Generator用你修改后的模板生成代码:

    openApiGenerate {
        generatorName = "kotlin"
        library = "kotlinx-serialization"
        inputSpec = "$rootDir/src/main/resources/swagger.yaml".toString()
        outputDir = "$buildDir/generated/openapi".toString()
        // 指定自定义模板的目录
        templateDir = "$rootDir/src/main/resources/openapi-templates/kotlinx-serialization"
        // 其他你需要的配置...
    }
    

做完这些,重新执行生成任务,那些麻烦的kotlin.Any?类型字段就不会出现在你的模型里了,序列化报错的问题也能解决~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 11:13:05