5
Jacksonを使用してJSONをArrayList <POJO>に逆シリアル化する
MyPojoJSONから逆シリアル化するJavaクラスがあります。MyPojoDeMixIn逆シリアル化を支援するために、特別なMixInクラスを構成しました。MyPojo唯一持っているintとString、適切なゲッターとセッターと組み合わせて、インスタンス変数を。MyPojoDeMixIn次のようになります。 public abstract class MyPojoDeMixIn { MyPojoDeMixIn( @JsonProperty("JsonName1") int prop1, @JsonProperty("JsonName2") int prop2, @JsonProperty("JsonName3") String prop3) {} } 私のテストクライアントでは次のようにしていますがJsonMappingException、型の不一致に関連しているため、コンパイル時には機能しません。 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) } だけが含まれる「Response」オブジェクトを作成することでこの問題を軽減できることは承知していますArrayList<MyPojo>が、返したいすべての型に対してこれらのやや役に立たないオブジェクトを作成する必要があります。 また、JacksonInFiveMinutesをオンラインで見ましたが、内容Map<A,B>とそれが私の問題にどのように関連しているかを理解するのにひどい時間がありました。わからない場合は、私はJavaにまったく不慣れで、Obj-Cのバックグラウンドを持っています。彼らは特に言及します: POJOおよび「単純な」タイプへのバインドに加えて、1つの追加のバリアントがあります。それは、ジェネリック(型付き)コンテナーへのバインドのバリアントです。この場合は、いわゆるType Erasure(Javaが下位互換性のある方法でジェネリックを実装するために使用)による特別な処理が必要であり、Collection.class(コンパイルされない)などを使用できません。 したがって、データをマップにバインドする場合は、次のようにする必要があります。 Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() …