目录一、核心定位二、原生 Jackson 处理 Kotlin 的原生痛点不加该依赖会出现的问题1. Kotlin 数据类 data class 反序列化失败2. 属性默认值丢失3. 只读属性 val 无法赋值4. 可空类型 / 非空类型校验失效5. 特殊类型无法序列化6. 不识别 Kotlin 注解三、jackson-module-kotlin 核心功能逐一解决上面问题1. 自动适配全参构造无需无参构造2. 自动填充构造参数默认值3. 支持 val 只读属性注入4. 强 Kotlin 空安全校验5. 全面兼容 Kotlin 特有类型6. 优化枚举序列化7. 兼容 Kotlin 注解与 Jackson 注解联动8. 支持内联类 value class新版模块四、如何启用模块必须注册才生效只加依赖没用SpringBoot 项目自动注册无需手动配置原生 Kotlin/Java 项目手动注册五、实战对比有无依赖的差异示例定义 Kotlin 数据类六、版本匹配注意事项七、总结一句话作用一、核心定位jackson-module-kotlin是 Jackson 官方提供的Kotlin 专用扩展模块专门解决 Jackson 原生Java 版序列化 / 反序列化 Kotlin 代码时的各类兼容缺陷让 Jackson 完美支持 Kotlin 独有语法数据类、无参构造、默认参数、空安全、顶层函数、val/var、nullable类型等。Jackson 原生只适配 Java 语法直接序列化 Kotlin 类会大量报错这个模块就是兼容桥。二、原生 Jackson 处理 Kotlin 的原生痛点不加该依赖会出现的问题1. Kotlin 数据类data class反序列化失败Kotlin 数据类只有全参构造函数没有无参构造 原生 Jackson 默认需要无参构造实例化对象直接抛异常No suitable constructor found for type ... can not instantiate from JSON object2. 属性默认值丢失Kotlin 支持构造参数默认值data class User(val name: String, val age: Int 18)原生 Jackson 反序列化时如果 JSON 不传age不会自动填充默认值直接赋值null触发空安全崩溃。3. 只读属性val无法赋值Kotlinval是只读字段无 setterJava 反射无法修改原生 Jackson 无法给val属性注入 JSON 值。4. 可空类型 / 非空类型校验失效val phone: String?/val id: Long原生 Jackson 不会校验空安全JSON 传null给非空字段不会报错运行时空指针。5. 特殊类型无法序列化Kotlin 集合ListT、MutableList、Sequence单例object、枚举enum class、密封类sealed classPair/Triple、Unit、顶层变量延迟初始化lateinit、委托属性by lazy6. 不识别 Kotlin 注解JvmField、JsonIgnore在 Kotlin 中行为异常原生 Jackson 解析逻辑错乱。三、jackson-module-kotlin 核心功能逐一解决上面问题1. 自动适配全参构造无需无参构造模块内部集成 Kotlin 反射读取类的主构造函数通过带参构造直接实例化对象不再强制要求空构造data class开箱即用。2. 自动填充构造参数默认值反序列化时读取 Kotlin 元数据获取每个参数默认值JSON 缺失字段时自动使用代码里定义的默认值避免手动给字段赋默认、空指针。3. 支持val只读属性注入通过 Kotlin 反射绕过 Java setter 限制直接通过构造函数赋值val属性完全正常序列化、反序列化。4. 强 Kotlin 空安全校验反序列化时校验类型可空性非空字段StringJSON 传null→ 直接抛出序列化异常提前拦截 NPE可空字段String?允许null符合 Kotlin 语法规范。5. 全面兼容 Kotlin 特有类型数据类 data class单例 object、密封类 sealed class、枚举Pair/Triple、Range、Sequence顶层类、顶层函数返回值Mutable 可变集合、不可变集合6. 优化枚举序列化Kotlin 枚举支持属性、自定义构造模块适配枚举的序列化 / 枚举名称匹配。7. 兼容 Kotlin 注解与 Jackson 注解联动让JsonProperty、JsonIgnore、JsonFormat在 Kotlin 类中行为和 Java 完全一致识别JvmField修饰字段。8. 支持内联类value class新版模块高版本 jackson-module-kotlin 支持 Kotlin 1.5 内联值类序列化。四、如何启用模块必须注册才生效只加依赖没用SpringBoot 项目自动注册无需手动配置SpringBoot 自动检测 classpath 存在jackson-module-kotlin会自动把模块注册到全局ObjectMapper直接使用。原生 Kotlin/Java 项目手动注册import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.kotlin.registerKotlinModule val mapper ObjectMapper() .registerKotlinModule() // 核心注册代码五、实战对比有无依赖的差异示例定义 Kotlin 数据类data class User( val username: String, val age: Int 18, val email: String? )JSON 输入缺少 age{username:zhangsan,email:null}不加 jackson-module-kotlin反序列化直接报错找不到构造函数就算加无参构造age 不会填充 18变成 null访问 age 触发空指针。添加并注册模块后通过全参构造创建 Userage 自动赋值默认值 18email 允许 null声明为可空如果 email 定义为String非空JSON 传 null 直接抛序列化异常。六、版本匹配注意事项该模块版本必须和核心 jackson-databind 版本保持一致否则反射兼容报错!-- jackson 核心包 -- dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.15.2/version /dependency !-- kotlin 模块版本和上面完全一致 -- dependency groupIdcom.fasterxml.jackson.module/groupId artifactIdjackson-module-kotlin/artifactId version2.15.2/version /dependency七、总结一句话作用jackson-module-kotlin是 Jackson 的 Kotlin 反射兼容模块补齐原生 Jackson 对 Kotlin 数据类、默认参数、val 只读属性、空安全、特殊类型的序列化 / 反序列化支持解决无构造报错、默认值丢失、空指针等一系列 Kotlin 序列化问题是 SpringBoot Kotlin 项目必引依赖。