[] [15]本当の問題エラーにjava.lang.ClassCastException:com.google.gson.internal.LinkedTreeMapはXXにキャストすることはできません

シーンを再生します。データの種類は、カプセル化されたインターフェイスに戻りリストを呼び出し、デバッグは、戻り値を確認することができます。しかし、そのステップが与えられ、リスト上で動作していた(と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())。

 

 

おすすめ

転載: www.cnblogs.com/huashengweilong/p/12004369.html