シーンを再生します。データの種類は、カプセル化されたインターフェイスに戻りリストを呼び出し、デバッグは、戻り値を確認することができます。しかし、そのステップが与えられ、リスト上で動作していた(とjava.lang.ClassCastException:com.google.gson.internal.LinkedTreeMapはXXにキャストすることはできません)。元のデータリストは、対応するエンティティクラスにないLinkedTreeMapフォーマットであり、。オンライン検索は、エンティティクラスにJSON形式の文字列の順番を解決するために多くの方法であり、データが一覧であるので、私が受け取った、彼らはまだデータを使用することができます一覧に変身します。
EDITORIAL:最終的にはインターフェースのパッケージを変更し、ソースからのデータ形式が間違っている、問題が解決しない様々な方法を試してみてください
原因:ジェネリックは<T>一覧への強いことができない、問題の範囲があるだろう
調査のコース:
(1)私のコードの先頭:
リストを取得し、有効なデータの状態を抽出しました。シンプルなので、幸せ。
// メインコード 一覧<userEntity> = USERLIST この .commentService.getUserList(USERID); // データインターフェイスを取得 。一覧<UserEntity> newList = list.stream ()フィルタ(I - > i.getStatus()== 1 ).collect(Collectors.toList()); // エラー
次に、以下のようにエラーに、返されるデータの形式は次のとおりです。
(2)、オンラインでこのエラーを確認しgson転送リストを試し、役に立ちません
Gson gson = 新しいGsonBuilder())(作成。 // 値のリストを考えるは、JSON文字列形式に変換され、 文字列userJson = gson.toJson(ユーザーリスト)。 // 方式1 T []配列= gson.fromJson(userJson、UserEntity。クラス)。 リスト <UserEntity> newList = は、Arrays.asList(アレイ) // 方式2 一覧<UserEntity>リスト=(一覧<UserEntity>)gson.fromJson(userJson、新しい TypeToken <リスト<UserEntity >>(){} .getType())。
(3)ObjectMapperターン、データフォーマット、エラーに一致有用ではなくなります。EntityクラスはLinkedTreeMapの整数値であるダブルです。
ObjectMapperマッパー= 新しいObjectMapper(); 一覧 <userEntity>リスト= mapper.convertValue(ユーザリスト、新しい新しい typereference <リスト<userEntity >>(){});
// USERLISTはuserJsonを覚えていない何の使用はありません、ここで覚えているビット。TODO
(4)地図userList.get(0)を受信し、データを処理します。実現可能な、しかし、私はまた、スクリーニングの条件をやりたい、これが私のニーズを行うことはできません
地図マップ= userList.get(0 ); UserEntity newInfo = 新しいUserEntity(); newInfo.setName(map.get( "名前" ).toString()); ... // ループ・エラーのために使用します。。。
(5)ソースで問題を解決するために
パッケージ・インターフェース・コンバータは、リストの中に問題を抱えています
一覧<userEntity>リスト=(一覧<userEntity>)この .restClient.get(URL、リスト。クラス); // これはリモートインタフェースへの呼び出しで、パッケージはRESTClient GETで、ポストの一般的な手順、それは、戻り値を変更することができませんもともと<T>
変更後:
JsonArray JSON = この.restClient.get(URL、List.JsonArray)。 リスト<UserEntity>リスト= gson.fromJson(JSON、新しい TypeToken <リスト<UserEntity >>(){} .getType())。