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

Kotlin Spring Boot后端与Kotlin Android端如何共享数据模型?

Kotlin Spring Boot后端与Kotlin Android端如何共享数据模型?

嘿,这个问题我太有共鸣了!用Kotlin同时写Spring Boot后端和Android端时,重复定义数据模型不仅浪费时间,还很容易因为字段不一致导致序列化/反序列化bug,下面给你几个在实际开发中验证过的靠谱方案:

1. 独立共享Gradle模块(最直接的入门方案)

这是大多数团队初期的首选,因为两者都是基于Gradle构建,配置成本极低:

  • 在项目根目录下新建一个纯Kotlin的Gradle模块,比如命名为shared-models,选择「Java/Kotlin Library」类型,绝对不要引入任何Android或Spring相关的依赖
  • 把所有共用的数据模型(比如data class User(val id: Long, val name: String, val email: String))都放在这个模块的src/main/kotlin目录下,只保留纯Kotlin核心代码,避免添加平台特定注解(比如Spring的@Entity或Android的@Parcelable)
  • 在Spring Boot项目的build.gradle.kts中添加依赖:implementation(project(":shared-models"))
  • 在Android项目的Module级别build.gradle.kts中添加依赖:implementation(project(":shared-models"))
  • 进阶技巧:如果需要平台特定功能,可以在各自项目中扩展共享模型。比如Spring端给共享的User类额外添加@Entity和JPA注解,Android端给User添加@Parcelize注解(需开启Kotlin扩展),核心字段结构完全共享,不会重复定义

2. Kotlin Multiplatform(KMP)模块(官方推荐的跨平台方案)

如果你的项目有长期跨平台扩展需求,KMP是更灵活的选择,能完美兼顾两端的平台特性:

  • 创建一个KMP模块,目标平台指定jvm(给Spring Boot用)和android(或androidJvm)
  • 共享的数据模型放在commonMain目录下,写纯Kotlin核心代码,比如:
    // commonMain/kotlin/com/example/models/User.kt
    data class User(
        val id: Long,
        val name: String,
        val email: String?
    )
    
  • 用expect/actual机制处理平台特定需求:比如Spring需要Jackson序列化注解,Android需要Parcelable,可以在commonMain定义expect的接口或注解,然后在jvmMain(Spring端)和androidMain(Android端)中实现actual版本
  • 配置完成后,Spring和Android项目都可以直接依赖这个KMP模块,既能共享核心模型,又能满足各自平台的序列化、组件传递需求

3. 代码生成工具(适合模型变更频率低的场景)

如果不想维护多模块结构,可以用代码生成工具自动同步两端的模型:

  • 基于OpenAPI/Swagger:先在Spring Boot后端通过OpenAPI注解定义API和数据模型,然后用OpenAPI Generator生成Android端的Kotlin数据模型;也可以先编写统一的OpenAPI YAML/JSON配置文件,再同时生成两端的模型代码
  • 自定义注解处理器:用Kotlin的kapt写一个简单的注解处理器,从共享的元数据(比如JSON Schema、配置文件)自动生成两端的数据模型类
  • 注意:这个方法的缺点是模型变更后需要重新生成代码,不如前两个方案实时同步方便

关键注意事项

  • 保持共享模型的纯净性:不要在共享代码中引入平台依赖,避免出现Spring和Android的依赖冲突
  • 统一序列化框架:两端尽量用相同的序列化库,比如都用kotlinx-serialization或Jackson,确保字段名、空值处理、枚举规则完全一致
  • 版本同步:共享模块的版本要和两端项目保持同步,避免因版本不一致导致的编译错误

这些方案我在多个项目中都实践过,前两个是最常用的——如果只是简单共享模型,独立Gradle模块足够;如果有长期跨平台规划,KMP会是更长远的选择!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:04:33