2012-04-26 13 views
2

GeoJSONを対応するPOJOに逆シリアル化しようとしています。私はそれぞれのGeoJSONタイプ(ポイント、ラインストリング、ポリゴンなど)に対してJavaオブジェクトを持っています。私はJacksonが対応するJavaクラスを使用するためにGeoJSONエンティティのタイプフィールドを使用するようにしたいと思います。GeoJSONをJackson Parserで逆シリアル化する

{ "type": "Point", "coordinates": [100.0, 0.0] } 

{ "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] } 

{ 
"type": "Polygon", "coordinates": [ 
    [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ], 
    [ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ] 
    ] 
} 

ジャクソンがポイントクラスを使用する必要がありますし、それに応じて座標フィールドをデシリアライズする必要があり最初のオブジェクトの場合:たとえば、私は次のようにGeoJSONエンティティを持って言うことができます。 2番目のオブジェクトでは、JacksonはLineStringオブジェクトを使用し、3番目のオブジェクトについてはポリゴンオブジェクトを使用します。

私はあなたがジャクソンでカスタムデシリアライザを書くことができると知っていますが、私は単一のオブジェクトフィールドのものしか見ていません。私のケースでは、タイプフィールドに応じて表現全体が変化するため、GeoJSONエンティティ全体のデシリアライザを作成する必要があると思います。

おそらく誰かが私にこのケースで何をすべきかのヒントを与えることができますか?おそらく私が読んだことのない巧妙なトリックがありますか?

ありがとうございました。

答えて

2

なぜカスタムハンドラが必要ですか?自動多型の処理を得るには、@JsonTypeInfoアノテーション(プロパティ "type";メソッド "As.NAME")を使用する必要があります。サブクラスは@JsonTypeNameで使用する名前を定義する必要があります。しかし、それ以外は実行可能と思われる。 'coordinates'プロパティの構造が異なるように見えるため、別のサブクラスのためにモデル化する必要があります。

+2

例:http://stackoverflow.com/questions/10329706/json-deserialization-into-another-class-hierarchy-using-jackson/10336625#10336625 –

+0

タンクがたくさん!それはまさに私が探していたものでした...あなたは本当にここで私を助けました。 – evermean

関連する問題