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

升级Jackson Kotlin模块至2.18后遇反序列化错误:无委托/属性创建器

解决Jackson Kotlin 2.18版本反序列化Data Class失败问题

问题分析

将Jackson Kotlin模块从2.17升级到2.18后,Kotlin Data Class出现反序列化失败,报错cannot deserialize from Object value (no delegate- or property-based Creator),但2.17版本可正常运行。这是因为2.18版本对Kotlin构造函数的识别逻辑做了调整,或依赖、配置出现不一致导致的。

解决方案

1. 统一Jackson全模块版本

确保Jackson核心模块(jackson-databind、jackson-core、jackson-module-kotlin)使用完全一致的2.18.x版本,避免版本冲突引发功能异常。

Gradle示例:

dependencies {
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.18.0")
    implementation("com.fasterxml.jackson.core:jackson-databind:2.18.0")
    implementation("com.fasterxml.jackson.core:jackson-core:2.18.0")
}

Maven示例:

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-kotlin</artifactId>
        <version>2.18.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.18.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.18.0</version>
    </dependency>
</dependencies>

2. 显式注册KotlinModule并配置构造函数识别

若手动配置Jackson ObjectMapper,需显式注册KotlinModule,确保Jackson能识别Kotlin Data Class的构造函数:

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.registerKotlinModule

// 注册Kotlin模块
val objectMapper = ObjectMapper().registerKotlinModule()

如果是Spring Boot项目,可通过配置类确保模块注册:

import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.registerKotlinModule

@Configuration
class JacksonConfig {
    @Bean
    fun objectMapper(): ObjectMapper {
        return ObjectMapper().registerKotlinModule()
    }
}

3. 给Data Class参数添加@JsonProperty注解(备选)

若上述方法无效,可显式指定JSON字段与构造参数的映射:

import com.fasterxml.jackson.annotation.JsonProperty
import jakarta.validation.constraints.NotEmpty
import jakarta.validation.constraints.Size
import java.io.Serializable

data class StopWordModifyRequest(
    @field:NotEmpty
    @field:Size(min = 2, max = 255)
    @JsonProperty("word")
    val word: String,
) : Serializable

原因说明

Jackson 2.18版本优化了Kotlin反射处理逻辑,对构造函数的识别规则更严格。如果依赖版本不统一、KotlinModule未正确注册,就会导致Jackson无法自动识别Data Class的构造函数,从而抛出反序列化异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:27:41