2

GeoJSON を対応する POJO に逆シリアル化しようとしています。GeoJSON タイプ (Point、LineString、Polygon など) ごとに Java オブジェクトがあります。Jackson に GeoJSON エンティティの type フィールドを使用させて、対応する Java クラスを使用させたいと考えています。たとえば、次の GeoJSON エンティティがあるとします。

{ "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] ]
  ]
}

最初のオブジェクトでは、Jackson はポイント クラスを使用し、それに応じて座標フィールドを逆シリアル化する必要があります。2 番目のオブジェクトには、Jackson は LineString オブジェクトを使用し、3 番目のオブジェクトにはポリゴン オブジェクトを使用する必要があります。

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

おそらく、誰かがこの場合に何をすべきかについてのヒントを教えてくれますか? おそらく、私が読んだことのない巧妙なトリックがあるのでしょうか?

ありがとう。

4

1 に答える 1

1

なぜカスタム ハンドラーが必要なのですか? @JsonTypeInfo自動ポリモーフィック型処理を取得するには、注釈 (プロパティ "type"; メソッド "As.NAME")を使用する必要があります。サブクラスは、 で使用する名前を定義する必要があります@JsonTypeName。しかし、それ以外は実行可能のようです。「座標」プロパティの構造は異なるように見えるため、個別のサブクラスに対してモデル化する必要があります。

于 2012-04-26T21:50:28.617 に答える