Rest Assured:如何将JSON响应作为字符串返回?(Java)

4

如何将JSON响应作为字符串返回给我的代码?

目的:我想在从json响应体中获取accessToken后调用getAccessToken(),并需要将其作为String返回以供其他方法使用。

我正在尝试获取的响应示例:

"accessToken" : "The ID I need from here"

代码:

private String apiAccessToken;

public JsonPath getAccessToken() {
    JsonPath jsonPath = given().header("X-API-KEY", Config.API_KEY).header("session", this.sessionID)
            .header("username", this.userNameId).queryParam("code", verifiedCode).log().all()
            .get(baseUri + basePath + "/vm1/verifyCode").then().log().all().extract().jsonPath();

    this.apiAccessToken = jsonPath.get("accessToken");
    return new JsonPath(apiAccessToken);
}

[添加 - 展示我如何使用下面评论中的解决方案]

我调用该方法的示例:

public static String getToken(String key) {
    String res = given()
            .header("X-API-KEY", Config.API_KEY)
            .header("session", this.SessionId)
            .header("username", this.UserName)
            .queryParam("code", verifiedCode)
            .log().all()
            .get(baseUri + basePath + "/vm1 /verifyCode")
            .then()
            .log().all()
            .extract().asString();

    JsonPath js = new JsonPath(res);
    return js.get(key).toString();
}

public static String getJsonPath(Response response, String key) {
    String complete = response.asString();
    JsonPath js = new JsonPath(complete);
    return js.get(key).toString();
}

@Test
    public void testAuthValidator() throws InterruptedException, IOException, GeneralSecurityException {
        String sentCode = GmailUtility.getVerificationCode(); // Uses GMAIL API service to to read and get code from email and sends to getAccessToken
        System.out.println(sentCode);
        String Token = getToken("accessToken"); // Validates verification code. Spits out response for accessToken
        System.out.println(validator);
        driver = initializeDriver(); // Invokes Chrome
        driver.get(env.API_Website); // Goes to api website
        AuthApi auth = new AuthApi(driver);
        auth.getAuthorizeButton().click(); // Clicks a text field on webpage
        auth.getValueField().sendKeys("Token " + Token); // Need to call extracted response for the accessToken from getAccessToken.

1
请参考此链接:验证后从响应中提取值 - kaweesha
1
@kaweesha - 感谢您提供的资源。Rest Assured似乎有很多语法糖和需要学习的内容。一如既往地感激。已将此链接加入书签。 - foragerEngineer
1个回答

6

编写一个简单的可重用方法,使用JSONPath提取值并在您的代码中调用该方法,这是一个示例

可重用的方法:

public static String getJsonPath(Response response, String key) {
    String complete = response.asString();
    JsonPath js = new JsonPath(complete);
    return js.get(key).toString();
}

测试:

public static void main(String[] args) {

    Response res = given().header("X-API-KEY", Config.API_KEY).header("session", this.sessionID)
            .header("username", this.userNameId).queryParam("code", verifiedCode).log().all()
            .get(baseUri + basePath + "/vm1/verifyCode").then().log().all().extract().response();
    String value = getJsonPath(res, "accessToken");
    
    System.out.println(value);
}

更新:

public static String getToken(String key) {
    String res = given().header("X-API-KEY", Config.API_KEY).header("session", this.SessionId)
            .header("username", this.UserName).queryParam("code", verifiedCode).log().all()
            .get(baseUri + basePath + "/vm1 /verifyCode").then().log().all().extract().asString();
    JsonPath js = new JsonPath(res);
    return js.get(key).toString();
}

@Test
public void testAuthValidator() throws InterruptedException, IOException, GeneralSecurityException {
    String sentCode = GmailUtility.getVerificationCode();
    System.out.println(sentCode);
    String Token = getToken("accessToken");
    System.out.println(Token);
    driver = initializeDriver();
    driver.get(env.API_Website);
    AuthApi auth = new AuthApi(driver);
    auth.getAuthorizeButton().click();
    auth.getValueField().sendKeys("Token " + Token);
}

通过这个方法,您可以获取任何值


谢谢您的回复。我将您的解决方案添加到我正在处理的场景中(在代码中留下了注释),以展示代码流程。我不确定如何将您提供的内容应用于“auth.getValueField().sendKeys("Token " + 需要访问令牌作为字符串);”。您能否提供额外的指导? - foragerEngineer
1
请检查更新的部分,同时从您的代码中删除getAccessToken()并使用我提供的代码。 - Wilfred Clement
啊,我明白了。据我所知,getToken参数被设置为String。使用extract().asString(),然后我们将提取的响应作为字符串返回。很酷。我注意到一件事情。你提供的可重用方法由于某种原因没有被调用,我已经更新了我的示例代码以进行观察,请告诉我是否有任何问题。 - foragerEngineer
你能进入我的 Webex 吗? - Wilfred Clement
当然,让我看看如何做到这一点。 - foragerEngineer
您提供的解决方案已经按照预期工作。感谢您在此方面的指导。 - foragerEngineer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接