Десериализация GeoJSON с помощью Jackson Parser

Я пытаюсь десериализовать GeoJSON в соответствующие POJO. У меня есть объект Java для каждого типа GeoJSON (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] ]
  ]
}

Для первого объекта Джексон должен использовать класс точек и соответствующим образом десериализовать поле координат. Для второго объекта Джексон должен использовать объект LineString, а для третьего — полигональный объект.

Я знаю, что вы можете написать собственные десериализаторы в Джексоне, но я видел их только для отдельных полей объектов. В моем случае я думаю, что мне нужно написать десериализатор для всего объекта GeoJSON, потому что в зависимости от поля типа меняется все представление.

Может кто подскажет, что делать в этом случае? Может, есть какой-то хитрый трюк, о котором я не читал?

Спасибо.


person evermean    schedule 26.04.2012    source источник


Ответы (1)


Зачем вам нужен пользовательский обработчик? Вам нужно использовать аннотацию @JsonTypeInfo (свойство «тип»; метод «As.NAME»), чтобы получить автоматическую обработку полиморфного типа; и подклассы должны определить имя для использования с @JsonTypeName. Но в остальном это кажется выполнимым. Структура свойства «координаты», кажется, различается, поэтому вам необходимо смоделировать это для отдельных подклассов.

person StaxMan    schedule 26.04.2012
comment
Пример здесь: stackoverflow.com/questions/10329706/ - person Eugene Retunsky; 27.04.2012
comment
Большое спасибо! Это было именно то, что я искал ... вы действительно помогли мне здесь. - person evermean; 27.04.2012