2012-04-26 84 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