Мне нужно десериализовать GeoJSON JSON объект с библиотекой Джексона.В этом объекте json есть места, где это применимо:
Если есть
"type" : "name"
, то следующий объект json имеет один тип.Скажем, например:
"properties": {
"name": "urn:ogc:def:crs:OGC:1.3:CRS84"
}
С другой стороны, если есть
"type": "link"
, тогда следующий объект json другого типа.Скажем, например:
"properties": {
"href": "http://example.com/crs/42",
"type": "proj4"
}
Теперь у меня есть PropertiesPOJO, который содержит:
private String name;
private String href;
private String type;
Текущее решение требует проверки типа объекта, чтобы мы знали, какие частиСвойства POJO мы хотим рассмотреть. Это не очень хорошая практика.Я бы предпочел сделать это с помощью специального десериализатора, который будет десериализован непосредственно в NamePropertiesPOJO или LinkPropertiesPOJO.Одна идея, которая у меня была, это поместить
@JsonDeserialize(using=PropertiesDeserializer.class)
@JsonProperty("properties")
NamePropertiesPOJO namePropertiesPOJO = null;
@JsonDeserialize(using=PropertiesDeserializer.class)
@JsonProperty("properties")
LinkPropertiesPOJO linkPropertiesPOJO = null;
Но я получаю
Произошло JsonMappingException: несколько полей, представляющих свойство "properties":
Итак, есть ли какой-нибудь другой способ сделать это с помощью аннотаций Джексона?
С уважением,
Деспот