用Jackson Parser反序列化GeoJSON

时间:2012-04-26 18:56:59

标签: serialization jackson pojo geojson

我正在尝试将GeoJSON反序列化为相应的POJO。我有一个每个GeoJSON类型的Java对象(Point,LineString,Polygon等......)。我想让杰克逊使用GeoJSON实体的类型字段来使用相应的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应使用LineString对象,第三个对象应使用多边形对象。

我知道你可以在Jackson中编写自定义反序列化器,但我只看到了单个对象字段的那些。在我的情况下,我认为我必须为整个GeoJSON实体编写一个反序列化器,因为根据类型字段,整个表示会发生变化。

也许有人可以给我一个暗示在这种情况下该做什么?也许有一些我没有读过的聪明伎俩?

感谢。

1 个答案:

答案 0 :(得分:2)

为什么需要自定义处理程序?您需要使用@JsonTypeInfo注释(属性“类型”;方法“As.NAME”)来获得自动多态类型处理;和子类必须定义用于@JsonTypeName的名称。但除此之外似乎还可行。 'coordinates'属性的结构似乎有所不同,因此您需要为不同的子类建模。