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

RestAssured报错:Specification to merge with cannot be null 求助

问题原因

@BeforeAll的setUp方法初始化顺序错误:先调用TokenManager.getAuthToken()生成令牌,而该方法内部的extractJsonWebToken()会调用getBaseUriAndContentTypeToJson()获取请求规范,但此时setBaseUriAndContentTypeToJson()还未执行,导致返回的请求规范为null,传给RestAssured的.spec()方法时触发IllegalArgumentException。

修复方案

调整setUp方法的初始化顺序,先完成基础URI和Content-Type请求规范的初始化,再生成令牌并初始化认证规范:

@BeforeAll
public static void setUp() {
    // 先初始化基础URI与Content-Type规范
    setBaseUriAndContentTypeToJson(
            new RequestSpecBuilder()
                    .setBaseUri(ApiEndPoints.BASE_ENDPOINT)
                    .setContentType(ContentType.JSON)
                    .build());

    // 再获取令牌并初始化认证规范
    String auth = TokenManager.getAuthToken();
    setAuthentication(
            new RequestSpecBuilder()
                    .addHeader("Authorization", auth)
                    .build());

    setResponseSpec(
            new ResponseSpecBuilder()
                    .expectStatusCode(200)
                    .expectContentType(ContentType.JSON)
                    .build());
}
额外优化建议

可以让TokenManager的令牌生成逻辑独立,不依赖父类的请求规范,避免初始化顺序问题:

private static String extractJsonWebToken() {
    authToken = "Bearer " +
            given()
                    .baseUri("https://dummyjson.com")
                    .contentType(ContentType.JSON)
                    .body(REQUEST_BODY)
                    .log().all()
            .when()
                    .post(GET_TOKEN_ENDPOINT)
            .then()
                    .extract()
                    .path("token");

    System.out.println("Token " + authToken);
    return authToken;
}

这样即使父类的规范未初始化,令牌生成也能正常运行,降低代码耦合度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:54:57