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

Swagger生成Ktor类未导入kotlinx.serialization.Serializable报错如何解决

修复openapi-generator生成Kotlin类缺失@Serializable注解问题

最优解决方案:修改生成器配置自动注入注解

无需手动修改生成后的代码,一次配置永久生效:

  • 打开你的openapi-generator配置(Gradle/Maven插件配置、CLI命令参数均可)
  • 针对Kotlin生成器添加serializationLibrary配置项,值设为kotlinx_serialization
    Gradle Kts配置示例:
    openapiGenerate {
        generatorName.set("kotlin-server") // 生成客户端则填kotlin
        configOptions.set(mapOf(
            "serializationLibrary" to "kotlinx_serialization",
            "packageName" to "com.your.project" // 保留原有其他配置
        ))
    }
    
    CLI命令示例:
    openapi-generator generate -i openapi.yaml -g kotlin-server -o ./generated \
      --additional-properties serializationLibrary=kotlinx_serialization
    
  • 重新执行代码生成命令,新生成的所有Model类都会自动导入kotlinx.serialization.Serializable并添加类注解,报错即可解决

临时调试方案:手动注册外部序列化器

如果不方便修改生成配置,可通过外部序列化器适配,不需要改动生成代码:

import kotlinx.serialization.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.*
import com.your.project.generated.model.SomeRequest

// 声明和生成类字段完全一致的代理类
@Serializable
private class SomeRequestSurrogate(
    val id: Long,
    val content: String
    // 补齐所有和SomeRequest对应的字段
)

// 实现外部序列化器
object SomeRequestSerializer : KSerializer<SomeRequest> {
    override val descriptor: SerialDescriptor = SomeRequestSurrogate.serializer().descriptor

    override fun serialize(encoder: Encoder, value: SomeRequest) {
        val surrogate = SomeRequestSurrogate(value.id, value.content)
        encoder.encodeSerializableValue(SomeRequestSurrogate.serializer(), surrogate)
    }

    override fun deserialize(decoder: Decoder): SomeRequest {
        val surrogate = decoder.decodeSerializableValue(SomeRequestSurrogate.serializer())
        return SomeRequest(surrogate.id, surrogate.content)
    }
}

完成后在Ktor内容协商配置中注册该序列化器即可生效。

前置校验

确保项目已开启Kotlin序列化插件并引入对应依赖:

// 根目录build.gradle.kts配置
plugins {
    kotlin("jvm") version "1.9.0" apply false
    kotlin("plugin.serialization") version "1.9.0" apply false
}

// 业务模块build.gradle.kts配置
dependencies {
    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.3")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:45:03