首先是一点背景。 我有一个部署在Weblogic中的应用程序。它从服务接收Json响应。我正在尝试使用JsonPath来导航树,我遇到了一个不寻常的问题。
我正在使用Maven来构建/部署应用程序。 相关性:
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>json-path</artifactId>
<version>1.8.1</version>
</dependency>
在Junit中使用完整响应运行并且在部署后意识到它在应用程序中不起作用之后,我使其变得更简单并且硬编码了非常小的数据子集。
{
"ChangeStatus": {
"Code": {
"value": "1002"
},
"Description": {
"value": "Matched more then 10 records"
}
}
}
这就是我现在正在看的......
String miniJson = "{\"ChangeStatus\":{\"Code\":{\"value\":\"1002\"},\"Description\":{\"value\":\"Matched more then 10 records\"}}}";
JsonPath miniJsonPath = new JsonPath(miniJson);
String statusCode = miniJsonPath.getString("ChangeStatus.Code.value");
在JUnit中,此代码有效,我可以成功断言1002。 在推送到weblogic之后的应用程序中,这个确切的代码片段不起作用。 它会抛出NoSuchMethodError。
任何想法都会受到欢迎。 仅供参考,我们使用的是Weblogic 10.3.6
提前致谢!
答案 0 :(得分:0)
我不是Weblogic的专家,但作为替代方案,您可以包含
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.0-rc1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.2.0-rc1</version>
</dependency>
并创建一个包含2个成员ChangeStatus
和Code
的类Description
,然后您可以使用以下命令反序列化JSON:
`new ObjectMapper().readValue(miniJson, ChangeStatus.class)`
希望它能够结束。
答案 1 :(得分:0)
我发现jsonpath依赖于antlr。 Weblogic也包含此软件包,但我认为它是旧版本。
我通过告诉Weblogic使用应用程序中包含的类来解决问题。 weblogic.xml中
<wls:container-descriptor>
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>