11

このようなJSONデータがあります

{"セッション ID":7242750700467747000}

数値はサーバー応答から事前に取得され、Java Long としてサーバー側で生成されます。クライアントはこれsessionIDを認識し、リクエストとともに送信します。問題は、クライアントのリクエストがサーバーに到着したときに、この値を再度解析して Long 型にする必要があることです。具体的には、JsonPath を使用します。

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path-assert</artifactId>
    <version>0.8.1</version>
    <scope>test</scope>
</dependency>

このようにJSONデータを解析すると

長い sessionID = JsonPath.read(json, "$.sessionID");

例外があります:

java.lang.ClassCastException: java.lang.Integer は java.lang.Long にキャストできません

したがって、数値は JsonPath によって Integer として解析されるようです。Integer は Long よりも小さいため、これは間違いなく間違った結果につながります。JsonPath でデータを解析して Long として返す方法はありますか?

4

3 に答える 3

7

わかりました、JsonPath プロバイダーを少し変更して、なんとかできました。今私は使用します:

<dependency>
    <groupId>com.jayway.restassured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>1.7.2</version>
</dependency>

そこから私は使用することができます

import com.jayway.restassured.path.json.JsonPath;
// ...
Long sessionID = JsonPath.with(json).getLong("sessionID");

このライブラリの表記法は、最初に が欠けていることを除いて同じです$.。これはまったく必要ありません。

于 2013-05-06T08:28:47.743 に答える
1

私が見た限りでは、API はこのオプションを提供していません。

だから私はあなたのための2つのオプションがあります:

  1. JSON シリアル化では、sessionId を String にします。String を読み取り、Long に解析します。
  2. Jacksonを使用して、JSON を読み取らせます。これにより、Long を読み取ることができます。
于 2013-05-05T22:34:27.340 に答える