作为Java/JSON/REST Assured主题的新手,我想提取“token”的一个参数:从JSON响应体中提取一个字符串,并将其存储为变量,我可以将其带到其他一些类中并在那里使用。但是,我已经尝试过了,但还没有找到方法。下面是我在开始时创建的代码的一部分,创建的方式与存储在该类中的其他请求相同,但这是我需要从响应中获取某些内容的第一个代码:
public FakeTokenVO fakeToken() {
String payload = "payloadthere";
return given(specBuilder.fakeTokenRequestSpecification()) .
body(payload)
.log().all()
.when()
.post(RestApiRoutes.FAKE_URI)
.then()
.log().all()
.extract()
.response()
.as(FakeTokenVO.class);
}
不要在意负载和那些VO类,因为它作为数据模型存储在其他地方。请求的响应如下所示:
{
"createTokenResponse": {
"createTokenSuccess": {
"token": "token_with_somewhere_about_700_characters"
}
}
}
下面是我如何尝试修改它以获得我稍后需要的响应部分(授权其他请求的令牌):
@Test
public void fakeToken()
{
String payload = "payloadthere";
String token = given(specBuilder.fakeTokenRequestSpecification())
.body(payload)
.log().all()
.when()
.post(RestApiRoutes.FAKE_URI)
.then()
.log().all()
.extract()
.response()
.body().path("createTokenResponse.createTokenSuccess.token");
System.out.print(token);
}
此测试返回了我需要的值,但我不知道如何将其实现为方法而不是测试。请帮助我如何处理它?我遗漏了什么?我尝试搜索答案,但尚未找到解决方案或不知道如何在我的代码部分中实现它。
1条答案
按热度按时间vfh0ocws1#
我假设你可以得到一个字符串形式的响应。所以你所需要做的就是解析你的Json字符串。为此你可以使用任何可用的Json解析器。最流行的是Json-Jackson(也被称为Faster XML)或Gson(由Google提供)。这两种解析器都是非常有名和流行的。(我个人更喜欢Jackson,但这是一个观点问题)。
然而,对于这种简单的情况,我编写了自己的实用程序(Jackson库上的一个薄 Package 器),它允许您非常简单地解析Json String,而无需学习相对复杂的库。
也可以创建自己的类,例如
然后你的代码可能看起来像这样:
这是JsonUtils类的Javadoc。此实用程序是我编写和维护的开放源代码MgntUtils库的一部分。您可以在Maven Central here或github上获得作为maven工件的库(包括源代码和javadoc)