JSONからデシリアライズするのに興味のあるJavaクラスMyPojo
があります。私は、特別なMixInクラス、MyPojoDeMixIn
を設定して、デシリアライズを手助けしました。 MyPojo
には、int
とString
のインスタンス変数と、適切なゲッターとセッターが組み合わされています。私のテストクライアントでJSONをArrayListに逆シリアル化する<POJO>ジャクソンを使用する
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
私は次の操作を行いますが、型の不一致に関連JsonMappingException
がありますので、もちろん、それはコンパイル時には動作しません:MyPojoDeMixIn
は次のようになります。
ObjectMapper m = new ObjectMapper();
m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class);
try { ArrayList<MyPojo> arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }
私は、私はそれでだけArrayList<MyPojo>
を持つ「レスポンス」オブジェクトを作成することで、この問題を軽減することができることを承知していますが、その後、私は私が返すようにしたいすべての単一のタイプのためにこれらの多少の無駄なオブジェクトを作成する必要があります。
私はJacksonInFiveMinutesでもオンラインで見ていましたが、Map<A,B>
の内容を理解するのにひどい時間がありました。あなたが言うことができない場合、私はJavaに全く新しいもので、Obj-Cのバックグラウンドから来ています。彼らは、具体的に言及:
をPOJOと「シンプル」タイプへの結合に加えて、1つの 追加のバリエーションがあります:ジェネリック(入力された)コンテナに結合することが。 このケースでは、 Collection.class(コンパイルはしません)のようなものを使用できないようにする、いわゆるタイプ消去のタイプ (Javaによって幾分後方互換性のある互換性を実装するために使用されます)のため特別な処理が必要です。だから、
あなたが使用する必要があります地図にデータをバインドしたい場合:私は
ArrayList
に直接デシリアライズするにはどうすればよい
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
?
あなたの答えは、組み込みの 'TypeReference'のサポートを使用する方法についての彼らの情報に関連すると思われる - 私はちょうどそれを行う方法を得ることはありませんが...どのようにその手順については、上記の私の編集を参照してください。ジェネリック医薬品を使用する。 –
それは関連しています。しかし、これは生産現場のコードからのスニペットです。あなたのmixinについては忘れて、私が示したコードを使用してください(ただしPOJOは実際のbeanクラスの名前に置き換えてください)。 – Perception
あなたのコードはコンパイルされましたが、 'arrayList.toString()'に 'NullPointerException'を出力しようとすると実行時例外が発生します。私は 'POJO'がそのプロパティの命名規則に準拠していない、つまりWebサービスがProp1Memberを返し、オブジェクトにProp1があることが原因であると考えられます。これが私がmixinsを使って始めている唯一の本当の理由です。そのため、純粋なオブジェクトに '@ JsonProperty'の宣言を入れる必要はありません。 –