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

Rest Assured Jsonpath在JDK8下反序列化对象列表失败问题

问题根因

抛出ServiceConfigurationError: com.fasterxml.jackson.databind.Module: Provider com.fasterxml.jackson.datatype.jdk8.Jdk8Module not found异常的核心原因是Jackson依赖版本严重不兼容:

  • Rest Assured 5.1.0 发布于2022年,内置依赖的Jackson系列包版本为2.13.x,它通过Java SPI机制自动扫描注册类路径下的Jackson扩展模块。
  • 你手动在pom中引入的jackson-datatype-jdk8版本为2.6.3、jackson-datatype-jsr310版本为2.6.0,是2015年发布的超旧版本,和Rest Assured内置的高版本Jackson核心包API完全不匹配,SPI扫描到旧版本模块的配置文件后,找不到对应版本的Jdk8Module类,直接抛出加载失败异常。
  • 你本地安装的JDK1.8.0_333和Rest Assured 5.1.0完全兼容,Java版本不是问题诱因。
解决方案

按以下步骤操作即可修复:

  • 统一所有Jackson相关依赖的版本,和Rest Assured 5.1.0内置的Jackson版本对齐为2.13.3,直接替换pom中原有相关依赖为如下配置:
<!-- Rest Assured 核心依赖 -->
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>5.1.0</version>
    <scope>test</scope>
</dependency>

<!-- Jackson核心包,统一版本为2.13.3 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.3</version>
</dependency>
<!-- JDK8扩展模块 -->
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jdk8</artifactId>
    <version>2.13.3</version>
</dependency>
<!-- Java8时间API支持模块,用于反序列化响应中的时间字段 -->
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.13.3</version>
</dependency>

如果你不想手动配置Jackson包,可以直接删掉原有手动加的两个2.6.x版本的Jackson datatype依赖,Rest Assured会通过Maven传递依赖自动引入对应兼容版本的Jackson包,手动指定版本是为了避免其他依赖传递引入低版本Jackson造成冲突。

  • 依赖修改完成后,在项目根目录执行如下Maven命令,强制清理旧构建产物、更新拉取正确版本的依赖:
mvn clean install -U
  • 如果执行完上述步骤仍报类找不到错误,手动删除本地Maven仓库中Jackson的旧版本缓存:进入本地Maven仓库路径~/.m2/repository/com/fasterxml/jackson/,删除所有版本号为2.6.x的文件夹,重新执行Maven依赖拉取即可。
额外注意事项

响应中的effectiveDate、expiryDate是带时区的时间格式,如果你的Incentive类中对应字段使用OffsetDateTime/LocalDateTime等Java8时间类型,需要在字段上添加格式注解避免反序列化失败:

public class Incentive {
    private String incentiveId;
    // 配置时间格式匹配响应返回的格式
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
    private OffsetDateTime effectiveDate;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
    private OffsetDateTime expiryDate;
    private String incentiveName;
    private Integer incentiveAmount;
    private String incentiveType;
    private String disclaimer;
    // 省略getter/setter
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:12:27