SpringBootTest指定classes时DataClass反序列化失败问题
问题解决:Jackson反序列化Kotlin数据类失败(无构造器支持)
错误原因
你指定@SpringBootTest(classes = ...)时,未包含自定义的JacksonConfiguration类。这个配置类负责给ObjectMapper注册Jackson Kotlin模块——Kotlin数据类的构造器逻辑和Java类不同,必须依赖该模块才能让Jackson识别并调用其构造器,完成反序列化。
不指定classes时,Spring会自动扫描加载所有配置类,包括JacksonConfiguration,所以ObjectMapper能正常工作;但手动指定classes后,仅加载了你列出的类,导致ObjectMapper缺少Kotlin模块,无法解析Frame数据类。
解决方案
修改测试类的@SpringBootTest注解,将JacksonConfiguration::class加入classes数组:
@ActiveProfiles("integration-test") @SpringBootTest( classes = [ AnimationRepository::class, TestDataSourceConfiguration::class, JacksonConfiguration::class, // 新增该配置类 ] ) class AnimationRepositoryTest { // 原有代码保持不变 }
这样Spring会加载你的自定义Jackson配置,生成的ObjectMapper会正确注册Kotlin模块,即可正常反序列化List<Frame>对象。
额外验证(可选)
确保项目依赖中包含jackson-module-kotlin:
- Gradle:
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
- Maven:
<dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-kotlin</artifactId> </dependency>
由于你在完整上下文环境下能正常运行,说明依赖已存在,此步仅作确认。
内容的提问来源于stack exchange,提问作者Chris Schmitz
相关产品推荐
相关产品推荐

