Я использую Джексона для разбора JSON, который я не контролирую. JSON выглядит так:
{
"status":"0"
"type":"type1"
"info": {
// additional fields
}
}
Мой класс выглядит следующим образом
public class Response {
private String status;
private String type;
private Info info
}
Подкласс Info, который я использую, зависит от свойства type, поэтому мое сопоставление для информации
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = Type1Info.class, name = "type1"),
@JsonSubTypes.Type(value = Type2Info.class, name = "type2") })
public abstract class Info {
// some fields
}
Насколько я могу судить, это правильный способ использования информации о типе, когда отличительный элемент находится на том же уровне, что и элемент, который должен быть запущен. Но это не работает, я всегда получаю ту же ошибку:
com.fasterxml.jackson.databind.JsonMappingException: Неожиданный токен (END_OBJECT), ожидается FIELD_NAME: отсутствует свойство 'type', которое должно содержат идентификатор типа
Если я изменю EXTERNAL_PROPERTY на PROPERTY, я все равно получаю ту же ошибку. Непонятно ли мое понимание EXTERNAL_PROPERTI?