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
相关产品推荐
相关产品推荐

