2012-04-26 2 views
2

Я пытаюсь десериализовать GeoJSON в соответствующие POJO. У меня есть Java-объект для каждого типа GeoJSON (Point, LineString, Polygon и т. Д.). Я бы хотел, чтобы Jackson использовал поле типа GeoJSON Entity для использования соответствующего класса Java. Например позволяет сказать, что у меня есть следующий GeoJSON Entities:Deserialize GeoJSON with Jackson Parser

{ "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 Entity, потому что в зависимости от поля типа изменяется целое представление.

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

Спасибо.

ответ

2

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

+2

Пример: http://stackoverflow.com/questions/10329706/json-deserialization-into-another-class-hierarchy-using-jackson/10336625#10336625 –

+0

Танки много! Это именно то, что я искал ... ты действительно помог мне здесь. – evermean

Смежные вопросы