0

先说一点背景。我有一个部署在 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 上

提前致谢!

4

2 回答 2

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>

并创建一个ChangeStatus具有 2 个成员的类CodeDescription然后您可以使用以下方法反序列化 JSON:

    `new ObjectMapper().readValue(miniJson, ChangeStatus.class)`  

希望它有帮助。

于 2013-08-19T04:59:01.817 回答
0

我发现jsonpath依赖于antlr。Weblogic 也包含这个包,但我相信它是一个旧版本。

我通过告诉 Weblogic 使用应用程序中包含的类来解决问题。weblogic.xml

<wls:container-descriptor>
    <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>
于 2013-08-20T00:52:31.517 回答