如何确保仅当 Rest Assured 中不存在标题时才添加标题?

问题描述

我正在动态创建请求。获得令牌后,我将其添加为标头。当我尝试多次击中端点时出现问题。我最终添加了多个具有完全相同标记的标头。有没有办法可以在请求中查找可用标头并仅在标头不存在时添加标头?

public class PutUpdateCampaign extends PingPongRequest {



    @Steps
    GetToken getToken;

    @Step
    private String getToken() {
        return getToken.usingCredentials(AccessLevel.CREATE_CAMPAIGN).jsonPath().get("token");
    }

    private RequestSpecification getRequestSpecification() {
        QueryableRequestSpecification query = SpecificationQuerier.query(requestSpecification);
        Headers reqHeaders = query.getHeaders();
        if (reqHeaders.hasHeaderWithName("Authorization")) {
            return requestSpecification;
        }
        return requestSpecification.headers("Authorization","Token " + getToken());

    }
    @Override
    public <UpdateCampaign> Response withParameters(UpdateCampaign details) {

        return requestSpecification
                .spec(getRequestSpecification())
                .body(details)
                .log().all()
                .put( WebServiceEndPoints.CREATECAMPAIGN.getUrl() + "/" + UpdateCampaignStepDeFinitions.createdCampaignId)
                .then()
                .log().all()
                .extract().response();
    }


}

乒乓请求:

public abstract class PingPongRequest {

    public RequestSpecification requestSpecification = SerenityRest.given()
            .header("Accept","application/json")
            .header("Content-Type","application/json");

    @Step("with parameters")
    protected abstract <T> Response withParameters(T details);

}

如果我在测试中调用 withParameters 两次,我会得到两个 Authorization 标头。

    Headers:            Accept=application/json
                                Authorization=Token ddffgg
                                Authorization=Token ddffgg

当前代码结果

groovy.lang.MissingMethodException: No signature of method: static io.restassured.internal.SpecificationMerger.merge() is applicable for argument types: (io.restassured.internal.RequestSpecificationImpl,net.serenitybdd.rest.decorators.request.RequestSpecificationDecorated$ByteBuddy$3LuBUN60) values: [io.restassured.internal.RequestSpecificationImpl@2da27453,net.serenitybdd.rest.decorators.request.RequestSpecificationDecorated$ByteBuddy$3LuBUN60@2da27453]

欢迎任何关于更好地构建我的方法的建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)