2012-04-26 120 views
2

我試圖將GeoJSON反序列化爲相應的POJO。每個GeoJSON類型都有一個Java對象(Point,LineString,Polygon等等)。我想讓傑克遜使用GeoJSON實體的類型字段來使用相應的Java類。例如可以說我有以下GeoJSON的實體:用Jackson解析器反序列化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應該使用LineString對象和第三個多邊形對象。

我知道你可以在Jackson中編寫自定義的反序列化器,但我只看到了單個對象字段的那些。在我的情況下,我認爲我必須爲整個GeoJSON實體編寫一個反序列化器,因爲取決於類型字段,整個表示會發生變化。

也許有人可以給我一個暗示,在這種情況下做什麼?也許有一些我沒有讀到的巧妙技巧?

謝謝。

回答

2

爲什麼你需要自定義處理程序?您需要使用@JsonTypeInfo註釋(屬性「type」;方法「As.NAME」)來獲取自動多態類型處理;並且子類必須定義要與@JsonTypeName一起使用的名稱。但除此之外,它似乎是可行的。 「座標」屬性的結構似乎有所不同,因此您需要爲單獨的子類建模。

+2

一個例子:http://stackoverflow.com/questions/10329706/json-deserialization-into-another-class-hierarchy-using-jackson/10336625#10336625 – 2012-04-27 02:06:41

+0

坦克很多!那正是我正在尋找的東西......你真的幫助我在這裏。 – evermean 2012-04-27 11:45:18