Jacksonを使用して、複合オブジェクトをJSONに整列するために、DynamoDBにデータを格納するアプリケーションがあります。LinkedHashMapを複合オブジェクトにキャストする
たとえば私は、マーシャリングてるオブジェクトは次のようになります。
private int anInteger;
private SomeOtherObject;
とSomeOtherObjectは次のようになります:
private long aLong;
private float aFloat;
SomeObjectのは、次のようになります
private String aString;
private List<SomeObject> someObjectList;
これは問題なくマーシャリングされ、JSON文字列としてDBに格納されます。
DynamoDBからデータを取得するタイミングが来ると、自動的にJSONが取得され、それを元に戻します。「someObjectList」はList<SomeObject>
ではないList<LinkedHashMap>
として返されます。これは、ジャクソンの標準的な動作であり、間違いではありません。
これで問題が発生しました。私のコードベースは、List<SomeObject>
を扱っていると思っていますが、現実はそのハンドリングがList<LinkedHashMap>
です!私の質問は、私のLinkedHashMapを「SomeObject」に戻す方法です。明らかにこれは手動のプロセスですが、私が意味することは、値を抽出することすらできないということです。
私はこれを行う場合:
for (LinkedHashMap lhm : someObjectList) {
// Convert the values back
}
を私はコンパイルエラーがないのLinkedHashMap「SomeObjectの」someObjectListのタイプがあることを私に言ってもらいます。
私はこれを行う場合:
for (SomeObject lhm : someObjectList) {
// Convert the values back
}
を私はのLinkedHashMapが「SomeObjectの」にキャストできないことを私に言って、ランタイムエラーが発生します。
ただし、2番目の例ではPOJO型への静的参照は必要ありません。 –
@ BoSborgPetersen私はあなたがそのことをどういう意味かはっきりしていません... – StaxMan
恐ろしいです。私がしなければならないのは、POJOクラスにデフォルトのコンストラクタが含まれていることを確認することです(他のパラメータ化されたコンストラクタが存在する場合) – Gnana