[解決済み] LinkedHashMapから複合オブジェクトへのキャスト
質問
DynamoDBにデータを保存するアプリケーションを持っていますが、Jacksonを使用して複雑なオブジェクトをJSONにマーシャルしています。
例えば、私がマーシャルしているオブジェクトは次のようなものです。
private String aString;
private List<SomeObject> someObjectList;
ここで、SomeObjectは以下のような感じでしょうか。
private int anInteger;
private SomeOtherObject;
とSomeOtherObjectはこのような感じになるかもしれません。
private long aLong;
private float aFloat;
これは、オブジェクトが問題なくマーシャルされ、JSON文字列としてDBに格納されることを意味します。
DynamoDBからデータを取得するとき、Jacksonは自動的にJSONを取得し、それを変換して返します... ただし、'someObjectList' は
List<LinkedHashMap>
としてではなく
List<SomeObject>
! これは Jackson の標準的な動作であり、このようなことが起こるのは間違いではありません。
さて、これで問題が発生しました。私のコードベースでは
List<SomeObject>
を処理していると思っていますが、実際には
List<LinkedHashMap>
! 私の質問は、LinkedHashMapを'SomeObject'に戻すにはどうしたらいいかということです。明らかにこれは手動プロセスですが、私が言いたいのは、私は値を抽出することさえできないということです。
もし私がこうすれば
for (LinkedHashMap lhm : someObjectList) {
// Convert the values back
}
someObjectListはLinkedHashMapではなく 'SomeObject' 型であるというコンパイルエラーが発生しました。
このようにすると
for (SomeObject lhm : someObjectList) {
// Convert the values back
}
LinkedHashMapは'SomeObject'にキャストできないというランタイムエラーが発生します。
どのように解決するのですか?
この場合
ObjectMapper.convertValue()
を使うことができます。しかし、変換する型を知っておく必要があります。
POJO pojo = mapper.convertValue(singleObject, POJO.class);
// or:
List<POJO> pojos = mapper.convertValue(listOfObjects, new TypeReference<List<POJO>>() { });
というのは、機能的には同じです。
byte[] json = mapper.writeValueAsBytes(singleObject);
POJO pojo = mapper.readValue(json, POJO.class);
は、JSONとして実際にデータをシリアライズすることを避け、代わりに中間段階としてメモリ内のイベントシーケンスを使用します。
関連
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
[解決済み] JsonMappingException: No suitable constructor found for type [simple type, class ]: can't instantiate from JSON object.
-
[解決済み] 以下のjson文字列をjavaオブジェクトに変換する方法は?
-
[解決済み] ダイレクトキャスト vs 'as'演算子?
-
[解決済み] Javaでlongをintに安全にキャストする
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
-
[解決済み】JacksonでJavaオブジェクトをJSONに変換する
-
[解決済み] Jacksonを使用してJSONのフィールド名を変更する方法
-
[解決済み】JSONデータをJavaオブジェクトに変換する
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
SocketException java.netの4つの例外解決策。
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
java.sql.SQLException: 結果セットの開始前
-
Java基礎編 - オブジェクト指向
-
eclipse にリソースリーク:'in' が閉じない
-
ApiModel と @ApiModelProperty の使用法
-
[解決済み] java.lang.ClassCastException: java.util.LinkedHashMap は com.testing.models.Account にキャストできない。