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

Spring JsonTest自动配置失败:模型序列化切片测试求助

解决Spring @JsonTest自动配置失败的问题

嘿,我之前也碰到过类似的坑,结合你的情况来看,大概率是依赖配置出了问题——要么是冗余依赖导致版本冲突,要么是Jackson组件不全。下面给你一步步梳理解决方案:

问题根源分析

你用的是Spring Boot 2.0.0.RELEASE,这个版本的spring-boot-starter-test其实已经通过spring-boot-starter-json间接引入了完整的Jackson套件(包括core、databind、annotations这些核心组件)。而你单独引入了jackson-core,如果版本和Spring Boot默认的不一致,就会导致自动配置时出现组件缺失或者版本冲突,进而让@JsonTest无法正常工作。

具体解决步骤

1. 先删掉冗余的Jackson依赖

首先把单独的jackson-core依赖删掉,完全依赖Spring Boot starter的依赖管理,避免版本冲突:

<!-- 移除这个单独引入的依赖 -->
<!--
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2....</version>
</dependency>
-->

2. 确保@JsonTest的正确写法

你的测试类要正确使用@JsonTest注解,并且通过JacksonTester来测试序列化/反序列化,给你一个示例代码:

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.json.JsonTest;
import org.springframework.beans.factory.annotation.Autowired;
import static org.assertj.core.api.Assertions.assertThat;

@JsonTest
public class UserModelJsonTest {

    // 自动注入对应模型的JacksonTester
    @Autowired
    private JacksonTester<UserModel> jacksonTester;

    @Test
    void testUserModelSerialization() throws Exception {
        // 构造测试用的模型对象
        UserModel user = new UserModel("张三", 25);
        
        // 序列化后验证JSON内容
        String jsonResult = jacksonTester.write(user).getJson();
        assertThat(jsonResult).contains("\"username\":\"张三\"");
        assertThat(jsonResult).contains("\"age\":25");
    }

    @Test
    void testUserModelDeserialization() throws Exception {
        // 模拟前端传入的JSON字符串
        String testJson = "{\"username\":\"张三\",\"age\":25}";
        
        // 反序列化后验证对象属性
        UserModel user = jacksonTester.parseObject(testJson);
        assertThat(user.getUsername()).isEqualTo("张三");
        assertThat(user.getAge()).isEqualTo(25);
    }
}

3. 若必须手动引入Jackson,保证版本兼容

如果你因为某些原因一定要单独引入Jackson组件,必须使用和Spring Boot 2.0.0.RELEASE匹配的版本——这个版本对应的Jackson是2.9.6,所以依赖要这么写:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.6</version>
</dependency>

不过还是建议尽量用Spring Boot的依赖管理,不要手动指定版本,省心又避免冲突。

4. 排查并排除冲突依赖

如果你的项目里还有其他依赖引入了Jackson(比如某些第三方SDK),可能会导致版本冲突。这种情况下,可以在spring-boot-starter-test里排除掉冲突的Jackson组件:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.0.0.RELEASE</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

小提示

  • @JsonTest会自动帮你配置好ObjectMapper、JacksonTester这些核心组件,不用自己手动实例化
  • 如果你的模型用了自定义Jackson注解(比如@JsonProperty重命名字段、@JsonIgnore忽略字段),@JsonTest会自动识别这些配置,不用额外处理
  • 要是你有自定义的Jackson配置类(比如全局序列化规则),可以通过@Import把它加到测试类里,测试自定义规则下的序列化效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:01:16