JSONデシリアライゼーションにこの特定の問題があります。この JSON 構造を考えてみましょう。
{
"header":{
"objects":[
{"field":"value1"},
{"field":"value2"}
]
}
}
JSON 構造は、サード パーティ システムからのものであるため、変更できません。
それでは、この単純な POJO を作成してみましょう。
@JsonDeserialize(using=PojoDeserializer.class)
public class Pojo {
private string field;
//...getter, setter
}
上記の PojoDeserializer は {"field": "value"} json 文字列を取り、それを Pojo インスタンスにデシリアライズします。したがって、このように単純に逆シリアル化を行うことができます
Pojo インスタンス = new ObjectMapper().readValue("{\"field\": \"value\"}", Pojo.class);
そして、ここに私の問題があります。上記の構造を取り、それを Pojo インスタンスの Collection にデシリアライズする別のデシリアライザ PojosCollectionDeserializer を用意しましょう。前の例と同様の方法で使用したいと思います。
Collection<Pojo> pojos = new ObjectMapper().readValue("{...}", Collection.class);
しかし、PojosCollectionDeserializer を使用して Collection を作成する必要があると定義されていないため、これは機能しません。それを達成する方法はありますか?