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

Spring Native运行gradle构建的Docker镜像出现Unresolved class报错求助

报错解决方案

根因说明

你遇到的KotlinReflectionInternalError: Unresolved class报错,本质是Klaxon框架解析JSON依赖Kotlin反射能力,运行时无法正确加载TrustList类的元信息完成实例化,常见触发场景分两种:普通JVM镜像运行时缺少必要依赖/类结构不符合反射要求,GraalVM原生镜像缺少提前注册的反射元信息。

解决步骤

通用基础修改(所有场景都需要做)

  1. 修正TrustList类结构,显式生成无参构造,保证反射可以正常实例化类:
class TrustList(
    var certificates: List<PublicCert> = listOf()
)

如果PublicCert是自定义类,也需要做同样的修改,给所有构造属性添加默认值生成无参构造。
2. 检查build.gradle/build.gradle.kts配置,确保引入了和项目Kotlin版本一致的反射依赖:

// 版本号与你项目使用的Kotlin版本完全匹配即可
implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.22")

如果你使用的是GraalVM原生镜像(Spring Boot 3+默认生成原生镜像)

在基础修改之上,给所有参与JSON解析的类添加@Reflective注解,让Spring AOT处理器提前把类的反射元信息注册到原生镜像中:

import org.springframework.aot.hint.annotation.Reflective

@Reflective
class TrustList(
    var certificates: List<PublicCert> = listOf()
)

// PublicCert类也需要加同样的注解
@Reflective
class PublicCert(
    // 类内属性全部设置默认值
)

兜底替代方案

如果不想处理反射相关的适配问题,可以直接替换为Spring Boot自带的Jackson做JSON解析,对Kotlin的适配更成熟,只需引入jackson-module-kotlin依赖即可:

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue

// 解析代码替换为
val parsedTrustList = jacksonObjectMapper().readValue<TrustList>(json)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:54:08