Я пытаюсь использовать API Navitia, и в настоящее время я сталкиваюсь со странной проблемой десериализации встроенного типа места.
Чтобы упростить задачу, у меня есть следующий фрагмент JSON:
"embedded_type": "stop_area",
"stop_area": {
"codes": [{
"type": "CR-CI-CH",
"value": "0085-011205-00"
}, {
"type": "CR-CI-CH",
"value": "0085-011205-00"
}, {
"type": "UIC8",
"value": "85011205"
}, {
"type": "external_code",
"value": "OCE85011205"
}],
"name": "Lausanne",
"links": [],
"coord": {
"lat": "46.517297",
"lon": "6.629229"
},
"label": "Lausanne (Lausanne)",
"timezone": "Europe\/Paris",
"id": "stop_area:OCE:SA:85011205"
},
"quality": 0,
"name": "Lausanne (Lausanne)",
"id": "stop_area:OCE:SA:85011205"
, который я пытаюсь поместить в этот класс
public class Place extends Named {
public int quality;
public String id;
public String name;
public PlaceEmbeddedType embedded_type;
}
с PlaceEmbeddedType
, определенным следующим образом
@JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = StopArea.class, name = "stop_area"),
@JsonSubTypes.Type(value = StopPoint.class, name = "stop_point"),
@JsonSubTypes.Type(value = Address.class, name = "address"),
@JsonSubTypes.Type(value = POI.class, name = "poi"),
@JsonSubTypes.Type(value = AdministrativeRegion.class, name = "administrative_region")
})
public interface PlaceEmbeddedType {
}
Я бы подумал, что @JsonTypeInfo(use = Id.NAME, include = As.WRAPPER_OBJECT)
будетправильное отображение, но когда я его использую, я получаю
[INFO] com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (VALUE_STRING), expected START_OBJECT: need JSON Object to contain As.WRAPPER_OBJECT type information for class com.github.jenkinsx.quickstarts.vertx.rest.prometheus.navitia.PlaceEmbeddedType
[INFO] at [Source: (okhttp3.ResponseBody$BomAwareReader); line: 1, column: 2527] (through reference chain: com.github.jenkinsx.quickstarts.vertx.rest.prometheus.navitia.LinesList["lines"]->java.util.ArrayList[0]->com.github.jenkinsx.quickstarts.vertx.rest.prometheus.navitia.Line["routes"]->java.util.ArrayList[0]->com.github.jenkinsx.quickstarts.vertx.rest.prometheus.navitia.Route["direction"]->com.github.jenkinsx.quickstarts.vertx.rest.prometheus.navitia.Place["embedded_type"])
Так что я ищу способ использовать мою стратегию WRAPPER_TYPE
для объекта с уже существующими полями.Как я могу это сделать?