2

我正在尝试将 GeoJSON 反序列化为相应的 POJO。对于每个 GeoJSON 类型(点、线串、多边形等),我都有一个 Java 对象。我想让杰克逊使用 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 应该使用点类并相应地反序列化坐标字段。对于第二个对象,Jackson 应该使用 LineString 对象,对于第三个对象,应该使用多边形对象。

我知道您可以在 Jackson 中编写自定义反序列化器,但我只看到用于单个对象字段的反序列化器。就我而言,我认为我必须为整个 GeoJSON 实体编写一个反序列化器,因为根据类型字段,整个表示会发生变化。

也许有人可以提示我在这种情况下该怎么做?也许有一些我没有读过的聪明把戏?

谢谢。

4

1 回答 1

1

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

于 2012-04-26T21:50:28.617 回答