尝试从json响应获取节点时出现java错误

尝试从json响应获取节点时出现java错误,java,json,rest-assured,Java,Json,Rest Assured,我试图使用rest-assured和java从json路径中的节点检索细节。但是,我不断得到以下错误: java.lang.NoClassDefFoundError: org/apache/groovy/io/StringBuilderWriter at io.restassured.internal.path.json.ConfigurableJsonSlurper.parseObject(ConfigurableJsonSlurper.groovy:202) at sun.r

我试图使用rest-assured和java从json路径中的节点检索细节。但是,我不断得到以下错误:

java.lang.NoClassDefFoundError: org/apache/groovy/io/StringBuilderWriter
    at io.restassured.internal.path.json.ConfigurableJsonSlurper.parseObject(ConfigurableJsonSlurper.groovy:202)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at io.restassured.internal.path.json.ConfigurableJsonSlurper.parse(ConfigurableJsonSlurper.groovy:105)
    at io.restassured.internal.path.json.ConfigurableJsonSlurper$parse.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at io.restassured.internal.path.json.ConfigurableJsonSlurper.parseText(ConfigurableJsonSlurper.groovy:83)
    at io.restassured.path.json.JsonPath$4$1.method(JsonPath.java:949)
    at io.restassured.path.json.JsonPath$ExceptionCatcher.invoke(JsonPath.java:984)
    at io.restassured.path.json.JsonPath$4.doParseWith(JsonPath.java:951)
    at io.restassured.path.json.JsonPath$JsonParser.parseWith(JsonPath.java:1031)
    at io.restassured.path.json.JsonPath.get(JsonPath.java:202)
    at uk.co.hermes.cucumber.utils.xxx.postAccessToken(xxx.java:86)
    at uk.co.hermes.cucumber.utils.xxx.unblockUser(xxx.java:27)
我知道问题在于代码中的这一行:

String token = jsonPathEvaluator.get("token");
如何解决这个问题

public void postAccessToken(){

    RestAssured.baseURI  = "https://xxx";

    JSONObject requestJsonBodyParams = new JSONObject();
    requestJsonBodyParams.put("test", "xxx");



    Response response = RestAssured.given()
            .contentType(jsonContentType).
                    body(requestJsonBodyParams.toString()).
                    when().
                    post("/");

    Assert.assertEquals(response.statusCode(), 200);

    JsonPath jsonPathEvaluator = response.jsonPath();
    String token = jsonPathEvaluator.get("token");
}
更新:


我的回答假设您使用的是Maven/Gradle。如果不是这样,请告诉我们

此错误表示类路径上缺少依赖项,或者是版本崩溃。通常,这不应该发生,因为您使用的依赖项应该包括到其自身依赖项的可传递依赖项。对于restassured,它包含对groovy的依赖:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
</dependency>
如果你能试试这个,请公布结果

另外,请让我们知道您使用的是哪个版本的RestAssured

更新:

从dependency:tree输出中,您可以看到这里有几个groovy版本。我想添加2.5.6是为了解决这个问题,您可以删除它,因为它只会导致版本崩溃

但是,好的方面是:

您有两个依赖项:

net.serenity-bdd:serenity-core:1.5.2
net.serenity-bdd:serenity-rest-assured:2.0.48
<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>2.5.5</version>
</dependency>
net.serenity-bdd:serenity-core:1.5.2
net.serenity-bdd:serenity-rest-assured:2.0.48
这两个版本都有groovy依赖项,但分别适用于不同的版本2.4.11和2.5.5。这会导致版本崩溃,因为期望2.5.5的代码突然不得不使用2.4.11

缺少的类是在版本2.4.11之后添加到代码库中的,因此您的代码期望该类存在,但实际情况并非如此

有两种方法可以解决此问题:

向groovy添加显式依赖项,因为这将覆盖任何可传递依赖项的版本:

net.serenity-bdd:serenity-core:1.5.2
net.serenity-bdd:serenity-rest-assured:2.0.48
<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>2.5.5</version>
</dependency>
net.serenity-bdd:serenity-core:1.5.2
net.serenity-bdd:serenity-rest-assured:2.0.48
在不了解该框架的任何细节的情况下,我假设您应该对这两个依赖项使用相同的版本

更新#2:


快速的google搜索显示这两个依赖项似乎遵循相同的版本控制方案。总之,要么将serentiy core升级至2.0.48,要么将Serentity rest assured降级至1.5.2。另外,请删除对groovy all的依赖关系。

我也遇到了同样的错误,在深入研究POM.xml之后,我发现存在多个groovy依赖关系,但是要删除它:


只是很有魅力。我不确定这是否有帮助,但可以尝试删除多个groovy依赖项。

您确定在运行时环境中安装了所有依赖项吗?可能值得一看您的构建工具。另外,检查运行时环境是否安装了这些JAR。错误更多的是缺少依赖项。你能提供你的项目的依赖关系树吗?嗨,我仍然得到同样的问题,但是我已经根据你提供给我的mvn命令在问题中发布了结果。使用Rest-Assured-3.1.1。我将更新到3.3.0,看看平均时间会发生什么,这已经解决了它。非常感谢你,我会在20分钟内给你奖金hours@BruceyBandit你忘了吗“org.codehaus.groovy groovy 2.4.12”