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

OpenAPI Codegen Gradle插件忽略failOnUnknownProperties配置问题

解决OpenAPI Kotlin生成器failOnUnknownProperties配置不生效问题

问题分析

你配置的failOnUnknownProperties未被应用到生成的Serializer类中,核心原因是部分旧版本的OpenAPI Kotlin生成器模板未支持该配置项的注入,导致Jackson反序列化时未启用忽略未知字段的规则,服务新增字段后客户端因反序列化失败无法正常工作。

解决方案

1. 升级OpenAPI Generator插件版本

旧版本(如6.x以下)存在模板未兼容failOnUnknownProperties配置的问题,优先升级到最新稳定版:

plugins {
    id("org.openapi.generator") version "7.6.0" // 替换为最新稳定版本
}

升级后重新执行生成任务,大部分场景下配置会自动生效到Serializer类中。

2. 自定义模板强制注入配置

如果升级版本后仍未解决,可通过自定义模板修改Serializer的生成逻辑:

  • 从OpenAPI Generator官方模板库复制Kotlin模板中的Serializer.mustache文件,存放到本地项目目录(如src/main/resources/openapi-templates/kotlin)
  • 修改模板内容,添加FAIL_ON_UNKNOWN_PROPERTIES的配置:
object Serializer {
    @JvmStatic
    val jacksonObjectMapper: ObjectMapper = jacksonObjectMapper()
        .findAndRegisterModules()
        .setSerializationInclusion(JsonInclude.Include.NON_ABSENT)
        .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
        .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, {{failOnUnknownProperties}})
}
  • 在Gradle任务中指定自定义模板路径:
tasks.register<org.openapitools.generator.gradle.plugin.tasks.GenerateTask>("openApiGenerateSamApi") {
    // 保留原有配置
    templateDir.set("src/main/resources/openapi-templates/kotlin") // 指向你的自定义模板目录
}

3. 应用层手动覆盖配置

如果不想修改生成逻辑,可在应用启动时手动调整ObjectMapper配置:

// 在应用初始化代码中执行
Serializer.jacksonObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

或者直接创建自定义的ObjectMapper实例替代生成的Serializer:

val appObjectMapper = jacksonObjectMapper()
    .findAndRegisterModules()
    .setSerializationInclusion(JsonInclude.Include.NON_ABSENT)
    .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
    .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:26:15