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

Rest Assured使用hasKey校验响应data.year存在2001值报错如何解决

问题原因及解决方案

核心错误点

  • 匹配器选型错误:你使用的hasKey()是Hamcrest提供的Map结构校验匹配器,作用是判断Map对象是否包含指定键。但RestAssured执行body("data.year")时,会提取所有data数组元素下的year字段值,返回结果是数值类型的列表[2000, 2001, 2002, 2003, 2004, 2005],属于List结构而非Map结构,匹配逻辑完全不对应,因此抛出类型不匹配的异常。
  • 参数类型不匹配:接口返回的year字段是数值类型,你传入hasKey的参数是字符串"2001",就算匹配器用对,类型不一致也会导致校验失败。

修复代码

你需要改用校验列表包含指定元素的hasItem()匹配器,同时传入数值类型的2001作为参数,修改后的测试代码如下:

@Test
public void sixTest() {
    FlowerList flowerList = new FlowerList();
    Specification.installSpec(Specification.requestSpec(), Specification.responseSpec());
    Response response = given()
             .when()
             .get("/api/unknown")
             .then()
             .log().all()
             // 替换为hasItem匹配器,传数值2001
             .body("data.year", hasItem(2001))
             .extract().response().as((Type) FlowerList.class);
}

修复后即可正常校验data数组中是否存在year为2001的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:03