2012-04-26 3 views
2

GeoJSON을 해당 POJO로 비동기 변환하려고합니다. 각 GeoJSON Type (Point, LineString, Polygon 등)에 대한 Java Object가 있습니다. Jackson이 해당 Java 클래스를 사용하기 위해 GeoJSON Entity의 유형 필드를 사용하도록하고 싶습니다. 잭슨이 점 클래스를 사용해야하고 이에 따라 좌표 필드를 역 직렬화해야 할 첫 번째 개체에 대한Jackson Parser로 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] ] 
    ] 
} 

예를 들어 나는 다음과 같은 GeoJSON 엔티티가 있다고 할 수 있습니다. 두 번째 객체의 경우 Jackson은 LineString 객체를 사용하고 세 번째 객체의 경우 polygon 객체를 사용해야합니다.

잭슨에서 사용자 지정 디시리얼라이저를 작성할 수 있지만 단일 개체 필드에 대해서만 보았습니다. 제 경우에는 GeoJSON 엔티티 전체에 대해 디시리얼라이저를 작성해야한다고 생각합니다. 유형 필드에 따라 전체 표현이 변경되기 때문입니다.

누군가이 케이스에서해야 할 일에 대한 힌트를 줄 수 있습니까? 아마도 제가 읽지 않은 영리한 속임수가 있을까요?

감사합니다.

답변

2

왜 사용자 지정 처리기가 필요합니까? @JsonTypeInfo 어노테이션 (특성 "유형"; 메소드 "As.NAME")을 사용하여 자동 다형성 유형 처리를 수행해야합니다. 하위 클래스는 @JsonTypeName과 함께 사용할 이름을 정의해야합니다. 그러나 그것 이외에 그것은 가능할 것 같다. 'coordinates'속성의 구조가 다양하기 때문에 별도의 하위 클래스에 대해 모델링해야합니다.

+2

예 : http://stackoverflow.com/questions/10329706/json-deserialization-into-another-class-hierarchy-using-jackson/10336625#10336625 –

+0

탱크가 많이 있습니다! 그게 정확히 내가 찾던 ... 당신이 정말로 여기에서 나를 도왔습니다. – evermean