You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FasterXML Jackson是否支持Kotlin多平台开发?

FasterXML Jackson是否支持Kotlin多平台开发?

嗨,我来帮你梳理下这个问题哈~

首先直接给你结论:FasterXML Jackson的核心库并不官方支持iOS、桌面这类非JVM平台的Kotlin多平台开发。你用到的那些com.fasterxml.*包都是基于JVM生态构建的,所以当你切换到iosX64或iosArm64这类非JVM目标时,自然没法导入和使用这些依赖,这就是你遇到问题的根源。

那如果你想在KMP项目里实现类似的多态JSON序列化(就是你代码里用@JsonTypeInfo@JsonSubTypes实现的功能),这里给你两个可行的解决方向:

第一个方案:改用Kotlin官方的Kotlinx Serialization

这是最推荐的选择,因为它是JetBrains官方维护、完全适配KMP全平台的序列化库,完美支持iOS、桌面、JVM等所有KMP目标。针对你的场景,你可以用它的多态序列化注解来替代Jackson的实现:

  • 先在commonMain里替换掉原来的Jackson依赖,添加Kotlinx Serialization的相关依赖
  • 把你的代码改成类似这样:
import kotlinx.serialization.Serializable
import kotlinx.serialization.Polymorphic
import kotlinx.serialization.SerialName

@Polymorphic
@Serializable
abstract class Data: MyParcelable {
    // ... 你的原有业务代码
}

@Serializable
@SerialName("image")
class Image: Data() { /* ... */ }

@Serializable
@SerialName("video")
class Video: Data() { /* ... */ }

// Audio和Text类按照同样的方式修改即可

这样调整后,在所有KMP目标平台下都能正常编译和使用,完全不会有跨平台的导入问题。

第二个方案:尝试社区维护的Jackson多态适配

如果你实在想继续沿用Jackson的注解风格,目前有一些社区维护的项目尝试把Jackson适配到KMP的非JVM平台,但这类项目大多不是官方维护的,稳定性和长期兼容性都不如官方方案,后续的维护也没有保障,所以不太推荐你采用这个方向。

总结一下:从官方支持的角度来说,Jackson确实没法在KMP的iOS等非JVM目标下使用,所以更建议你切换到Kotlinx Serialization来实现跨平台的JSON序列化需求。

备注:内容来源于stack exchange,提问作者padmalcom

火山引擎 最新活动